In gewisser Weise - wenn du dein Sortierungsscript ersetzen kannst, ist die Sache schnell gelöst. jQuery-UI-Sortable wäre z.B. eine Lösung, da kannst du den Container und die sortierbaren Elemente recht frei bestimmen.
Ok, soll heißen, Du würdest dazu raten, ui-sortable in Verbindung mit (Anzahl der tr-elemente geteilt durch 2) tbody-Elementen zu nutzen?
Nein, ich würde Sortable auf das table-Element anwenden und damit tbody-Element sorieren (die jeweils 2 tr-Elemente gruppieren) und thead und tfoot von der sortierung ausschließen :)
Ich hab' das jetzt schnell auf jsfiddle gebaut und habe festgestellt, dass die breite der Zellen verworfen wird, sobald der Helper erzegut wird - um das zu umgehen, muss man sich seinen Helper selbst bauen und den td-Elementen die breite des originals zuweisen.
Hier muss man natürlich noch das CSS berücksichtigen, wo dann durch eventuelle Rahmen oder Innenabstände width() nicht mehr den richtigen Wert zurückliefert.
Aber als proof of concept sollte es taugen.