Co powiesz na kontrolowanie tego, co trafia do tabeli, tak aby zawsze przechowywać najmniejszą liczbę w pierwszej kolumnie, a największą w drugiej? O ile to oczywiście „znaczy” to samo. Prawdopodobnie tańsze jest zrobienie tego, zanim dostanie się do bazy danych.
Jeśli jest to niemożliwe, możesz zapisać pola tak, jak są, ale powielić je w kolejności numerycznej na dwa INNE pola, na których utworzysz klucz podstawowy (pseudo kodowy):
COLUMN A : 2
COLUMN B : 1
COLUMN A_PK : 1 ( if new.a < new.b then new.a else new.b )
COLUMN B_PK : 2 ( if new.b > new.a then new.b else new.a )
Można to łatwo zrobić za pomocą wyzwalacza (jak w odpowiedzi Ronalda) lub obsługiwać wyżej w aplikacji.