Huh? Way too slow for what?
The speed of the interface used to get to the hd44780 interface
will not affect being able to control or update the LCD.
A slower interface speed will only lower the speed of the LCD updates.
I suggest you have a look at fm's latest LiquidCrystal replacement library.https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home
If you scroll down on the wiki you will see the interface timing for each
of the interfaces supported on both AVRs, and pic32 processors.
In the table labeled "Benchark II" which is numbers provided by the LCDiSpeed sketch
that I wrote, you can see that a Shift Register (74HC595) using 3 wires can update a full 16x2 display
close to 500 times/sec, (around 400 times/sec in 2 wire mode)
while a pcf8574 i2c interface in 4 bit mode can update a full 16x2 display about 30 times/sec.
While I2c with a pcf8574 in 4 bit mode is more than 10x slower than using a shift register in 4 bit mode,
it is still very usable.
The library has a framework that allows you to quickly and easily drop in support for a new interface.
All the upper level command initialization is handled by a hd44780 LCD class that sits on top of the
minimal library interface class.
You could use the existing ic2 interface class which is for a pcf8574 as a guide for your mcp23008/mcp23016
to create a new interface class.
The interface classes are quite tiny as all they do is some initialization, push data/cmds to the interface
and handle a small bit of backlight control.
Everything else hd44780 related is handled by the generic LCD class.