Se você tiver N colunas em uma tabela, todas as combinações possíveis de colunas serão 2 ^ N-1 (removendo o conjunto vazio). Para 10 colunas, o que significaria 1023 índices, para 20 colunas, terminamos com 1048575 índices. A maioria dos índices nunca será usada, mas precisará ser levada em consideração pelo otimizador. É possível que o otimizador escolha um índice abaixo do ideal em vez de um índice melhor. Eu não seguiria o caminho de gerar todos os tipos de índices, em vez de tentar descobrir quais índices seriam realmente benéficos.
EDIT corrigiu o número de índices possíveis
Como Jeff aponta, é ainda pior que 2 ^ N (conjunto de potência), pois (3,2,1) é claramente diferente de (1,2,3). Para N colunas, podemos escolher a primeira posição em um índice que contém todas as colunas de N maneiras. Para a segunda posição do N-1, etc. Acabamos, portanto, com o N! índices diferentes de tamanho completo. Nenhum desses índices é incluído em outro índice neste conjunto. Além disso, não podemos adicionar outro índice mais curto para que ele não seja coberto por nenhum índice completo. O número de índices é, portanto, N !. O exemplo para 10 colunas, portanto, se torna 10! = 3628800 e para 20 (drumroll) 2432902008176640000 índices. Esse é um número ridiculamente grande: se colocarmos um ponto para cada índice de um mm por peça, o raio de luz levará 94 dias para passar todos os pontos. Tudo e todos, não ;-)