É verdade que TEXT pode lidar com qualquer entrada que você colocar no campo VARCHAR ou CHAR. Na verdade, TEXT pode manipular e dados que você pode querer colocar em DECIMAL, INT ou quase qualquer outro tipo também. Seguindo essa lógica, podemos fazer de cada coluna um tipo TEXT.
Mas isso seria um erro. Por quê? Porque usar o tipo de coluna apropriado para a entrada esperada permite que o banco de dados otimize melhor as consultas, use menos espaço em disco e torne o modelo de dados mais fácil de entender e manter.
Em relação às perguntas:uma coluna de nome de usuário deve usar VARCHAR(20), pois você deseja e espera que a maioria dos nomes de usuário seja curta, geralmente não mais que 10 a 20 caracteres. Para uma coluna de resenhas (como uma resenha de filme ou resenha de livro), um tipo de TEXTO seria apropriado, pois as resenhas podem abranger um único parágrafo a várias páginas.
Em relação aos índices, tente este link:
http://20bits.com/articles/interview-questions-database-indexes/