User cannot query cross-database, despite having permissions for both databases
This is an artifact of your testing methodology.  You impersonated a user.  A user is a database-level principal.
Instead impersonate the login, or test with the target identity actually connecting to SQL Server.