If you have systematic packet loss at high packet rates I'm not sure that using TCP will work as well as you want it to. Yes, it will do retransmittions for lost packets and things like 'slow start', but the overall outcome won't necessarily be what you want.
If the sending side doesn't spread the packates out (over time), they will be transmitted at LAN line rate, a 100MHz cpu is unlikely to be able to do 'normal' IP processing for line rate at for a 100MHz ethernet, and Ge speeds will be completely out. It is also very likely that the sending system discards UDP transmit requests when the application exceeds the network bandwidth (rather than blocking the send() call).
For maximum throughput you may need to write your own ethernet code that does the minimal required.
You might get away with a much faster version of the IP checksum routine - the list achives might be illuminative...
Also consider using UDP with a simple ack strategy.