Well, if you look at lsusb.txt you'll see exactly what we used in more detail than anyone would want.

It's some random usb hub that we've been using on our DS for a few years now. According to lsusb.txt, its a "Bus 001 Device 003: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB".
The two USB ports are a camera and the hub. The other two cameras are plugged into the hub, and the usb stick is also plugged in.
We use mjpg-streamer to interact with the cameras. There are potential USB bandwidth issues to be mindful of -- we were not able to open the camera devices until setting the resolution to 160x120, 160x120, and 320x240. I believe mjpg-streamer opens the devices in mjpg mode, as opposed to YUV (which an image processing framework such as NIVision or OpenCV would be more likely to open it in).
What did you use to determine that only two devices were detected? We used two different random hubs and had no issues detecting all cameras on either of them.