How about allowing standard asset descriptors to be used instead of contract ids for Classic assets?
{issuer}{code} - that's a handle up to 44 bytes length (32 bytes of address plus up to 12 bytes of asset code)
So asset issued on Soroban (let's call them contract tokens for convenience), will be identified by 32-byte handle, while Classic assets will be identified directly by the asset issuer+code descriptor.
That's much more efficient than a contract lookup. Especially if the contract is need only for mapping 32-byte has -> code+issuer combination. Usage of the issuer+code descriptor saves a roundtrip to the database (or cache lookup in the best case scenario).
The notion that assets in the smart contract environment should be minted only by smart contract and identified by the contract id came from Ethereum and other EVM-like chains. We can choose another way to implement this. Particularly because we have to build on top of existing blockchain (which by the way in many aspects is better than EVM).