Yeah XCM isn’t really EVM friendly. I also raised this issue before: XCM executor should use transfer over withdraw/deposit · Issue #6553 · paritytech/polkadot · GitHub
Our workaround is indeed create a temporary holding register account to simulate withdraw/deposit. However it still have some less than ideal side effects. Acala/lib.rs at eda23d91fe730681b56b362323928ffa7dcb9cf0 · AcalaNetwork/Acala · GitHub