Krajów nie jest dużo, o czym tu w ogóle myśleć daj nvarchar(255) lub ogólnie max, nie powinno to nikomu zaszkodzić bo aplikacja i tak powinna takie wolno zmienne dane cache'ować.
Z miastami jest ciekawiej bo jest ich już całkiem sporo na świecie. Mamy 7 miliardów ludzi, załóżmy że miasto z minimalną liczbą mieszkańców ma ich 1k, czyli wychodzi 7 milionów miast na świecie z bardzooooo dużym zapasem. Dając varchar(100) to mamy jakieś 700MB (ascii/utf-8) - co jest śmiesznie małą wartością. Generalnie dopóki nie przekroczysz rozmiaru wiersza, który jest dosyć niewielki (np. 8kb) to będzie OK. Baza może również trzymać nvarchar'y poza tabelą co będzie miało negatywny wpływ na wydajność.
Musisz sobie zrobić takie kalkulacje "serwetkowe" i ocenić sam ile tego potrzebujesz. Ja bym się nie szczypał i dał nvarchar(256)...