You can also get tup2 from tup1 using:
ClearAll[fA] fA = Union[Sort[{#, #[[{4, 5, 6, 1, 2, 3, 10, 11, 12, 7, 8, 9}]]}] & /@ #][[All, 1]] &; tup2A = fA @ tup1; // AbsoluteTiming // First
0.213222
Length @ tup2A
52650
ClearAll[fB] fB = DeleteDuplicates[ Sort[{#, #[[{4, 5, 6, 1, 2, 3, 10, 11, 12, 7, 8, 9}]]}] & /@ #][[All, 1]] &; tup2B = fB @ tup1; // AbsoluteTiming // First
0.257217
ClearAll[fC] fC = GroupOrbits[PermutationGroup[{{4, 5, 6, 1, 2, 3, 10, 11, 12, 7, 8, 9}}], #, Permute][[All, 1]] & tup2C = fC @ tup1; // AbsoluteTiming // First
0.640413
4. Memoization
ClearAll[fD] fD = Module[{f0}, f0[x_] := (f0[x] = f0[x[[{4, 5, 6, 1, 2, 3, 10, 11, 12, 7, 8, 9}]]] = Sequence[]; x); f0 /@ #] &; tup2D = fD @ tup1; // AbsoluteTiming // First
0.794055
ClearAll[fE] fE = DeleteDuplicatesBy[Sort[{#, #[[{4, 5, 6, 1, 2, 3, 10, 11, 12, 7, 8, 9}]]}]&] tup2E = fE @ tup1; // AbsoluteTiming // First
1.13389
ClearAll[fF] fF = Values @ GroupBy[#, Sort[{#, #[[{4, 5, 6, 1, 2, 3, 10, 11, 12, 7, 8, 9}]]}] &, First] &; tup2F = fF @ tup1; // AbsoluteTiming // First
1.28655
All six results match tup2b from WReach's answer:
tup2b == tup2A == tup2B == tup2C == tup2D == tup2E == tup2F
True
In comparison, tup2b takes about a second:
tup2b = Module[{keep}, keep[t_] := (keep[t] = False; keep[t[[{4, 5, 6, 1, 2, 3, 10, 11, 12, 7, 8, 9}]]] = False; True); Select[tup1, keep]]; // AbsoluteTiming // First
1.06063