Hence my suggestion of SCTP over UDP.
Using a large number of TCP connections breaks some of the assumptions behind TCP congestion control
Which assumptions? Using multiple connections is pretty standard in the enterprise storage world.
Not sure what you mean by using an internal work queue - short of running a custom TCP/IP stack in kernel space or using some non-standard socket API, there's no way to work around TCP's ordered delivery.
My bad, I missed that you were referring to lost packets blocking future packets (as opposed to slow-to-process work units blocking future work units). You're right that this is very much a problem with a single TCP stream. (Multiple TCP streams help with this.)