whammoed: what kernel are you using? For me in 2.6, my USB devices are detected by their entry point on the bus.
For instance, running 2.6.10, my dmesg output says:
usb 2-1: new low speed USB device using ohci_hcd and address 3
input: USB HID v1.00 Gamepad [Mega World] on usb-0000:00:02.0-1
usb 2-2: new low speed USB device using ohci_hcd and address 4
input: USB HID v1.00 Gamepad [Mega World] on usb-0000:00:02.0-2
These never change. I use them for ZSNES mostly, and they always work in the correct order, even after reboot.
[EDIT] re-reading your post I see you've moved their location. That's why they change. You need to always keep them in the same location. Adding a hub doesn't hurt, as the usb identifier just reports a different location.
eg: here's me adding the same two gamepads above, but this time on a hub:
usb 2-1.1: new low speed USB device using ohci_hcd and address 6
input: USB HID v1.00 Gamepad [Mega World] on usb-0000:00:02.0-1.1
usb 2-1.3: new low speed USB device using ohci_hcd and address 7
input: USB HID v1.00 Gamepad [Mega World] on usb-0000:00:02.0-1.3
Notice the extra digits and at the end of the usb identifier as it becomes aware of a serial hub.
If you develop a MAME setup with USB inputs under linux, you need to do all of your configuration with the devices in the same ports as the final cab will be.