Seria muito melhor se as datas fossem armazenadas como datas. Armazená-los como números em vez de strings apresenta um conjunto diferente de problemas.
Se você está absolutamente preso a datas armazenadas como strings, para permitir que os índices nas colunas sejam usados, você precisa converter as datas que está usando como parâmetros como strings no formato apropriado e, em seguida, confiar no fato de que a classificação de strings nesse formato específico corresponde à ordem de classificação esperada das datas reais. Se você comparar a string com uma data ou um número, obterá uma conversão implícita de tipo de dados que, na melhor das hipóteses, levará a problemas de desempenho porque os índices não podem ser usados e, na pior das hipóteses, gerarão resultados incorretos ou erros.
Supondo que você evite a conversão de tipo de dados, os problemas de desempenho provavelmente surgirão do fato de que o otimizador tem muita dificuldade em estimar a cardinalidade quando você usa o tipo de dados errado. A Oracle sabe, por exemplo, que há 365 dias (ou 8.760 horas ou 525.600 minutos) entre 01/01/2012 e 01/01/2013. Por outro lado, existem bilhões de strings possíveis entre '20120101000000' e '20130101000000'. Isso pode fazer com que o otimizador não use um índice quando você gostaria (ou vice-versa), use o tipo errado de junção, etc.