¿Qué tal controlar lo que entra en la tabla para que siempre almacene el número más pequeño en la primera columna y el más grande en la segunda? Siempre y cuando 'signifique' lo mismo, por supuesto. Probablemente sea menos costoso hacerlo incluso antes de que llegue a la base de datos.
Si esto es imposible, puede guardar los campos como están, pero duplicarlos en orden numérico en OTROS campos, en los que crearía la clave principal (pseudocó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 )
Esto podría hacerse fácilmente con un activador (como en la respuesta de Ronald) o manejarse más arriba, en la aplicación.