Honestly, I don't see the point in introducing yet another code path for a feature that is barely noticed. It would be better to just ignore hud_num_make_mono when a TrueType font is set. If a modder wants to have a monospaced font in the HUD then they can just use another font and change the HUD gauges which should use that font.
In that case, your idea should work well enough. At least the BankGothic MT TrueType font appears to use fixed-width digits, so there shouldn't be any problem with that. If there are any good TrueType editors (preferably free ones) that can adjust character widths, modders could use one of those if desired. (And it's probably better to just make hud_num_make_mono
do nothing if a TrueType font is given.)
It's possible but I don't think it's worth the effort, I think it would be better to either keep using the VF character or to paint the character in black above a rectangle. In most cases that would match how it's drawn currently and it wouldn't cause any performance penalties as the other solution would be drawing it to a framebuffer and then drawing the attached texture to the screen using a special shader.
I say go ahead with your second idea (drawing a black character). I'm a little skeptical as to whether it will look right if the speed gauge is almost completely transparent (I know, very few players would configure their HUD this way, but still), but I'd still like to see how it will look.
If you implement this by checking whether a character is the match-speed icon, be sure to use compare using unsigned integers. If you don't, then you'll most likely hit the undefined behavior of signed integer overflow.
Just so you know, I will be away from tomorrow until Wednesday of next week, and I won't be able to do any testing during that time. After I return, I'm going to check whether your code works with the German and Polish versions of the game without TrueType fonts; we want them to work first before committing your code.