It seems like one way to do this:
RawBoxes[ToBoxes[ TableForm[RandomReal[{-10, 10}, {3, 3}], TableHeadings -> {{"First left header", "Second left header", "Trird left header"}, {"First top header", "Second top header", "Third top header"}}]] /. (ColumnAlignments -> _) -> ColumnAlignments -> {Left, Right}]
You can make this behavior permanent using the Villagas-Galey trick :
Unprotect[TableForm]; TableForm[args___] /; ! TrueQ@ $inTableForm := Block[{$inTableForm = True}, RawBoxes[ToBoxes[TableForm[args]] /. (ColumnAlignments -> _) -> ColumnAlignments -> {Left, Right}]] Protect[TableForm];
Now
TableForm[RandomReal[{-10, 10}, {3, 3}], TableHeadings -> {{"First left header", "Second left header", "Third left header"}, {"First top header", "Second top header", "Third top header"}}]
gives:

Another way is to define an alternative function myTableForm :
myTableForm[args___] := RawBoxes[ToBoxes[TableForm[args]] /. (ColumnAlignments -> _) -> ColumnAlignments -> {Left, {Right}}]
source share