You should be able to do it using only three pins, plus power/ground with the right driver chip! So no need for I/O expanders unless you really want them.
You can do just about anything using only three Arduino pins. Just substitute 'the right microprocessor' for 'the right driver chip' in your statement above.
Don