Well it depends. There is a kernel parameter that forces a consistent walk order:
pci=bfsort
It forces breadth-first device sorting.
But otherwise I understand that devices are detected in parallel and whichever ones return first are designated eth0, eth1 etc.
We had this problem on some machine that have 4+ eth0 devices. We use RHEL|CentOS 5.x (see in the post above how we solved the problem).