I strongly oppose to some of the parts of this standard.
The biggest issue is that hashing stuff in memory != hashing ABi encoded stuff
For a struct of scalar types, it's the same, but for a struct that contains dynamically sized arrays, it's not the same, since ABI encoded means one word (bytes32) for the size and then one word for every value, meanwhile the memory layout is different: in memory, there's one extra word per array.
Second of all, you're making assumptions on how solidity will store stuff in memory.
Is it worth the gas saving?
IMHO keep the standard with `abi.encode` rather than `abi.encodePacked`, but delete that assembly hashing example from the EIP 712 description itself and move it somewhree else...
Directly signing ENS names in a message is both expensive, as it costs gas to look up what the name resolves to, and dangerous in the sense that the name can be changed to point to something else and the signed message will still be valid. It's up to the user to verify the addresses. Maybe in the future structures for like exchange orders can be standardized and MetaMask can verify the addresses for you.
I wasn't thinking so much about the data being signed, but the display of said data on-screen. A reverse lookup of the addresses in the data could resolve to ENS names that would be easier to recognise than the hex addresses themselves.