I wrote the DrawVGAText function, as well as supersample...
Thwt function is slower because it calls SetPixel (or whatever it is, I forget) for every pixel in the characters. Without question it's going to be slower most of the time by some degree. Although, as compared to GDI I'd bet the difference isn't sever 99% of the time... looks like your difference was 2FPS... I'd be willing to bet that if you put the same amount of text on the screen with DrawVGAText as with gersen's function you wouldn't drop below 27FPS anyway. 2FPS might be a big enough different for you to worry about though.
That being said, I am able to fill a screen with a background image, then put text over the entire thing with a random color in each pixel and still pull 30FPS on an old Casio E-125, so clearly it isn't THAT bad
In fact, all of my games released to date use that function with no ill effect... Invasion: Trivia is coded to run at 30FPS, I think K&G Arcade is 24FPS.
Supersample was hardcoded to I believe 30FPS because that's the speed I wanted it to run at... I wanted it to be a known rate so if you tried it on a device and saw something less you'd know something was up with that particular device.
...and so I said to Mr. Gates: "$640 billion should be enough for anyone!"