Are SPI or I2C timer interrupt based protocols?

SPI can run at 8 MHz. Default speed is 4 MHz.
If you use SPI.transfer( ); I think it may create an interrupt at the end to signify the transfer is done. You can write your code so that the data only gets sent out after your pulse code runs. Maybe send one row of data after a pulse, next row after next pulse, etc. so that the transfer always completes within 100uS.
Can't update LCD too fast or it becomes unreadable, yes? I haven't used one in ages, I don't know if that's changed at all.