In my experience you get a lot of density moving to a variable-width font, which is quite easy to write for a Z80 system. For example I've designed a couple with the horizontal size in the first byte of the bitmap:
Looking back at it, my Z80 for this isn't that good, but it was still fast enough to redraw a whole line of text in 1 or 2 frames, I'm sure others can do better.
https://github.com/Veltas/spectrum-env/blob/master/font-orig...
https://github.com/Veltas/spectrum-env/blob/master/font-smal...
Rendering:
https://github.com/Veltas/spectrum-env/blob/master/text.asm#...
Looking back at it, my Z80 for this isn't that good, but it was still fast enough to redraw a whole line of text in 1 or 2 frames, I'm sure others can do better.