Para responder a pergunta, no disco o MySql usa 1 + o tamanho que é usado no campo para armazenar os dados (portanto, se a coluna fosse declarada varchar(45), e o campo fosse "FooBar" usaria 7 bytes no disco, a menos que você esteja usando um conjunto de caracteres multibyte, onde estaria usando 14 bytes). Portanto, independentemente de você declarar suas colunas, isso não fará diferença no armazenamento final (você afirmou que está preocupado com a otimização de disco para uma tabela enorme). No entanto, isso faz diferença nas consultas, pois VARCHAR's são convertidos em CHAR's quando o MySql cria uma tabela temporária (SORT, ORDER, etc) e quanto mais registros você puder encaixar em uma única página, menos memória e mais rápido suas varreduras de tabela serão ser.