Es cierto que TEXT puede manejar cualquier entrada que coloque en el campo VARCHAR o CHAR. De hecho, TEXTO podría manejar y los datos que desee poner en DECIMAL, INT o casi cualquier otro tipo también. Siguiendo esta lógica, también podríamos hacer que cada columna sea de tipo TEXTO.
Pero esto sería un error. ¿Por qué? Porque usar el tipo de columna apropiado para la entrada esperada permite que la base de datos optimice mejor las consultas, usa menos espacio en disco y hace que el modelo de datos sea más fácil de entender y mantener.
Con respecto a las preguntas:una columna de nombre de usuario debe usar VARCHAR (20), ya que desearía y esperaría que la mayoría de los nombres de usuario fueran cortos, generalmente no más de 10 a 20 caracteres. Para una columna de reseñas (como una reseña de una película o de un libro), un tipo de TEXTO sería apropiado, ya que las reseñas pueden abarcar un solo párrafo en varias páginas.
En lo que respecta a los índices, prueba este enlace:
http://20bits.com/articles/interview-questions-database-indexes/