As comparações de int são mais rápidas que as comparações de varchar, pelo simples fato de que ints ocupam muito menos espaço que varchars.
Isso vale tanto para acesso não indexado quanto para acesso indexado. O caminho mais rápido é uma coluna int indexada.
Como vejo que você marcou a pergunta postgreql, você pode estar interessado no uso de espaço de diferentes tipos de data:
int
campos ocupam entre 2 e 8 bytes, sendo 4 geralmente mais que suficiente ( -2147483648 a +2147483647 )- os tipos de caracteres ocupam 4 bytes mais as strings reais.