Zasadniczo tak choć nie zrażaj się samymi varchar(). Ja pracuje na dużych bazach (tak mi sie wydaje - 1,5 GB) i tez uzywam varchar

Wszystko zalezy od przeznaczenia danego pola:
jesli pole varchar przechowuje daty i tak naprawde pełni funkcję dziennika rejestrującego daty to nie ma dla wydajności większego znaczenia czy to data czy varchar poza nadmiernym rozdefragmetowaniem plików bazy - natomiast jeżeli takie pole ma potem służyć jako kryterium wyboru danych, czy jako indeksy, czy służyć łączeniu tabel - wtedy wydajność ucierpi.
Jesli chodzi o pola typu text - nie ma sensu ich nadużywać. Bez sensu jest mieć nazwe użytkownika zapisaną jako text. Indeksy da się zakładac nawet na polach text (okreslona liczba początkowych znaków) ale w szastaniu zasobami serwera i przestrzenią dyskowa nalezy być wstrzemięźliwym.
Jeśli masz pole w bazie np. pesel - wiadomo, że musi być np int(9) - wtedy działa najszybciej. Tam gdzie możesz staraj się używać typu danych, który najbardziej podobny jest do Twoich danych. Ciąg znaków 46546 możesz zapisac na kilka sposobów ale podczas porównań zawsze będzie on działał szybciej na polu typu int niż char, bo aplikacja napotykając pierwszą cyfre - "4" ma do porównania tylko 9 pozostałych cyfr - natomiast jesli pole będzie typu char - trzeba cyfre "4" porównać jeszcze z całym alfabetem.
W większości przypadków "webowych" zwiększenie czasu odpowiedzi z 0.03 sec do 0.3 nie będzie specjalnie zauważalne, ale przy zapytaniach 0.5 wzrost 10 krotny czasu to już 5 sec