What are the different ways to implement an LED matrix driver circuit?
The usual solution is a combination of 1 and 2. For example you can use shift registers on the anodes and decoders to drive the cathodes (or vice versa). This reduces the number of outputs needed significantly. To dim you control the amount of time each LED is on. You can also get ICs (I've used the TLC5945) to do the dimming for you.

It takes some code to get all the data lined up the right way and shifted out at the right time, but it's not too bad.

You can multiplex pretty heavily without needing a lot more current. On the LED sign I built I tuned the drive current to get the right brightness with each LED being on continuously. When I switched to multiplexing the 24 lines (8 each of red, gree, blue) it looked fine with no adjustment to the current.