Win8 vs Win7 vs XP shouldn't make a difference -- they all assign joysticks the same way. Basically, the order the system has ever seen them is the order they'll show up. (ie, first joystick is P1, second plugged in is P2, etc... but if you plug them back in again out of order, it'll mess all that up)
The safest way to keep it consistent is to get it the way you want and never unplug them again.
I have a similar issue with my cab -- I've got a pair of USB ports for wired controllers for a P3/P4 when I want to play a 4p game. P1/P2 can use the cab controls, and P3/P4 can use wired controllers. (Which may, someday, be a small arcade stick, but in the mean time are XB1 or XB360 controllers)
I need the left USB port to be P3 and the right to be P4 no matter what joysticks are plugged in, or what order they're plugged in.
Once I finish wiring up the cab, I'm going to write a utility to do it, if I can't find an existing one. I'll post on here if I end up doing that. (Windows knows the physical path any USB device is plugged in via -- like Root- Port 2->USB Hub Port 3->Joystick. Its also easy to reorder the joysticks in Windows, so the utility will just watch for USB connection events, determine if its a joystick and its physical connection port and assign it accordingly. Its actually a small amount of code to do it, but I won't have a chance to futz with it until I get the cab buttoned up more.