dhenry:
Or you could directly PWM the outputs themselves
That would require tremendous amount of data being sent over the spi. I would say that's practically no-workable.
In that case (hc164 for example), the OP's original solution is better. Then it runs into the cross-conduction problem.
With hardware SPI at full speed (8MHz) its certainly fast enough to work, but I wasn't being that serious!