Que tal controlar o que entra na tabela para que você sempre armazene o menor número na primeira coluna e o maior na segunda? Desde que 'significa' a mesma coisa, claro. Provavelmente é mais barato fazer isso antes mesmo de chegar ao banco de dados.
Se isso for impossível, você pode salvar os campos como estão, mas duplicá-los em ordem numérica em dois OUTROS campos, nos quais você criaria a chave primária (pseudo código-ish):
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 )
Isso pode ser feito facilmente com um gatilho (como na resposta de Ronald) ou manipulado mais acima, no aplicativo.