Wow, you're getting yourself into a lovely interesting area. I can think of no better introduction to PC graphics than Abrash's big black book, which is probably still available in paper form, and can be downloaded (or used to be downloadable) from various places.
You are in the right forum for this, since graphics stuff the way you want to do it inevitably requires assembler. I agree with AmkG entirely about the pixel-drawing interrupt in BIOS. It is universal to all modes (wow!) but unbelievably slow.
The last time I drew a box on screen (using 16 colour 640*480 graphics) I first did fast horizontal and vertical line drawers, and used these. I wanted to alternate pixel colour to make a dithered colour effect, which was why I was doing it myself.
There are several quite separate reasons for not drawing pixel by pixel.
(1) to avoid the bios interrupt. But if you write your own single-pixel drawer, you'll find it is still quicker than bios.
(2) because in a 16 colour mode you can draw 8 horizontal pixels together, which saves time on the horizontal lines of your box. Note that there's no such benefit for the verticals!! The code will be much messier than single-pixel code, because you have to handle the ends of the line specially, where less than 8 pixels need drawing. Remember a very small box might have its left and right edges in the same byte, which gets even messier. But this is worth dealing with, because video ram is very slow, so repeated moves to video are frowned on.
(3) because drawing a single dot requires setting up registers in the VGA card, using in and out instructions. These are hideously, dreadfully slow compared to "normal" assembler. Very often you will be setting them to the same values for a succession of pixels, so a line drawer that sets them once, and leaves them, will be more efficient than a pixel drawer called repeatedly. This is a BIG gain, so it's worth doing. In my dithered example I could set a bit-mask in the VGA just once for the entire vertical line, saving potentially hundreds of "out"s.
(4) because doing a call and rts is also time consuming, especially if associated with instructions to maintain a stack-frame and preserve registers. But this is small compared to outs.
The only sad thing about all this is that less and less people are interested or know anything, because simple things like box drawing are provided ready-made by any respectable language or graphic user interface.
hope that helps. Get Abrash's book!
Lionel