Mathematica 120 130
Editar
Esta versión funciona con matrices de diferentes tamaños.
l = List;
g = Grid@Cases[Outer[l, Sequence @@ MapIndexed[l, #, {2}], 1]~Flatten~(Length[#] - 1),
x_ /; LessEqual @@ x[[All, 1]] == True :> x[[All, 2, 2]] - 1] &
Uso
g@{{10, 20, 30}, {1, 22, 3}}
g@{{1, 5, 7, 10}, {2, 6, 6, 8, 12}, {4, 5, 9}}
g@{{10, 20, 30}, {1, 2, 3}}
g@{{1, -2, 3}, {-12, -7, 8, 9, 6}, {3, 99, 9}, {100, 10, -23}, {90, 10}}

Explicación
Usando el primer ejemplo de arriba,
a = {{10, 20, 30}, {1, 22, 3}}
MapIndexedestablece índices para todos los elementos. NB: Mathematica comienza a contar con 1. (Luego lo tendremos en cuenta).
MapIndexed[l, a, {2}]
{{{10, {1, 1}}, {20, {1, 2}}, {30, {1, 3}}}, {{1, {2, 1}}, {22, {2, 2}}, {3, {2, 3}}}}
Outergenera todas las listas, cada una candidata como un conjunto de sándwiches y los índices de sus elementos; %contiene los resultados de la salida anterior. Los números, 10y 22que destaqué después de que salieron, se refieren a una matriz de sándwich {10,22}que aún no se ha identificado como tal.
Outer[l, Sequence @@ %, 1]~Flatten~(Length[a] - 1)
{{{10, {1, 1}}, {1, {2, 1}}}, {{ 10 , {1, 1}}, { 22 , {2, 2}}}, {{10, { 1, 1}}, {3, {2, 3}}}, {{20, {1, 2}}, {1, {2, 1}}}, {{20, {1, 2}}, {22, {2, 2}}}, {{20, {1, 2}}, {3, {2, 3}}}, {{30, {1, 3}}, {1, {2, 1}}}, {{30, {1, 3}}, {22, {2, 2}}}, {{30, {1, 3}}, {3, {2, 3}}}}
Casesprueba cada elemento de lo anterior para determinar si se LessEqualcumple una relación (menor o igual). Los resultados que se muestran a continuación son aquellos casos en los que se detectaron emparedados de matriz. Una vez más, destaqué {10,22}en la salida.
Cases[%, x_ /; LessEqual @@ x[[All, 1]] == True]
{{{ 10 , {1, 1}}, { 22 , {2, 2}}}, {{20, {1, 2}}, {22, {2, 2}}}}
%%se refiere a los penúltimos resultados. :>, [RuleDelayed] devuelve las partes de las instancias de interés, a saber, los índices de los sandwiches de matriz. -1corrige el hecho de que Mathematica comienza matrices con 1 en lugar de 0.
Cases[%%,
X_ /; LessEqual @@ x [[All, 1]] == True:> x [[All, 2, 2]] - 1]
{{0, 1}, {1, 1}}
Gridmuestra los resultados en una cuadrícula. La primera fila 0 1significa que el elemento 0 de la primera sublista (es decir, 10 ) y el elemento 1 de la segunda sublista (es decir, 22 ) constituyen el primer conjunto sándwich que se encontró.
Grid@%
0 1
1 1