An IO expander. One I use lots of is the MCP23017
which uses I2C to provide 16 IO ports. Up to 8 of them can be hooked up to the same I2C bus giving up to 128 extra IO ports.
It's also available as the MCP23S17 which uses SPI instead of I2C if you need a higher speed.
If you want ultra cheap and only want one direction of data (say 8 output ports), you can use a simple shift register. The most common is probably the 74HC595. You can cascade as many of these together as you like to give you lots and lots of IO ports. They are often used to drive LED displays, and can be controlled using the shiftOut()
command in the Arduino.