Increasing current capability of a Pin
I would go for the buffer. You would never have to worry about not delivering enough current or any damage to your CPLD.

Now you can use 300 transistors if your really want to but I would suggest using Darlington transistor arrays. They come in many different flavours, most giving you 7 inputs and outputs at a few hundred mA per channel.

See here: http://uk.rs-online.com/web/c/semiconductors/discretes/darlington-transistor/?searchTerm=darlington+transistor+array&amp;sort-by=default&amp;sort-order=default&amp;applied-dimensions=4294868855&amp;lastAttributeSelectedBlock=Configuration

You would still need about 40 something arrays but if you are able to use surface mount components it should not become too unwieldy.

Using Darlington transistors:

The Darlington array is usually packaged as follows:



Logic:



Internally:



Now, it may look complicated but it is actually quite simple. Pins labelled "B" are inputs (transistor base) and pins labelled "C" are outputs (transistor collector). All that is needed is for you to use the exact same circuit as you posted above, but instead of a MOSFET, usuing the Darlington pair. Connect the base to the 5V output terminal of your MCU and the collector to the collector resistor (in your case 5k as you indicated). For this package the emitter is common and is connected to ground, also as you have shown.

If you are interested:
The Darlington array effectively multiplies the gain of the two transistors it contains resulting in a very high gain. This high gain allows very small currents to flow in through the base while still driving or sinking much higher currents.