If I read this correctly, is there no way to do an 8 bit out in one operation with the PORTD call? The documentation leads me to think you have to leave bits 0 and 1 alone for serial I/O and the other ports are 8 bits wide.
Thank you for those suggestions. I did plan on using the serial port and didn't want to resort to using a shift register but guess I will have to. Kind of irks me that the Arduino doesn't have 8 consecutive bits available for the user.
How about a port-expander like the MCP23S17? That gives you 16 bits of general IO. It takes around 3 uS to send a byte via SPI and according to the MCP23S17 docs only 0.5 uS for the ports to change in response to valid data. That is still quite fast.
Or skip the intermediate chip and get an SPI DAC chip, like the MCP4921.