I'm crazy, so I rewrote the scaler shader from scratch tonight. As the super sampling wasn't really giving me the performance I wanted anyhow, I decided to prioritize the upsampling part of it. Also, the previous version was using code based on the public domain, but I felt a little bit like I was cheating so I reimplemented from scratch with my own code. This new version retains details much better, even as low as 540p and still looks pretty nice. However, since the image is much sharper, you might have to add FXAA at lower resolutions (or even higher for performance reasons) to get a more stable image. Also, it is not doing AA, so you'll still need to use MSAA or FXAA. The previous version was doing some sort of AA, but performing much worse than MSAA/FXAA so it wasn't worth it. Performance is pretty decent too, at least on an okay GPU. I tested on the Intel HD 500, and it is just north of 60 fps, but with a simple test scene so would probably not be usable in a real game (in that case you'd just have to reduce the resolution in the project settings and live with bilinear interpolation).
Native render 1080p:

4K render sampled to 1080p:

540p render sampled to 1080P:

On the 540p image in particular, you can notice a lot of high-frequency detail is lost on the cube (and this is unavoidable, the information just isn't there), but if you look on the floor and columns, there is very little loss to quality. The background too, while pixelated, looks much better than you'd expect from 540p and tons better than bilinear filtering. In this case I had FXAA off so you could see my shader, but at lower resolutions you would enable it and it gets rid of most of the pixel artifacts.