Not sure about emacs but Chrome and Firefox can run under Wayland native these days though still a bit off from them using it on a default launch I think. As for the general workaround you landed on that kind of approach is probably still the best approach at the moment. You can also set the scaling algorithm to something else (I prefer nearest neighbor) if that helps any. There was a PR to support setting X hidpi for XWayland but it got held up somewhere in XWayland stuff apparently.
Definitely a painful use case combination still but one that should solve itself once things actually start using Wayland rather than XWayland.