Строки, вероятно, будут менее эффективными, чем просто хранение целых чисел для года, месяца и дня. Это немного больше словоблудия в ваших запросах, но они, вероятно, будут работать быстрее, поскольку вы можете индексировать их способами, которые имеют смысл для типов запросов, которые вы делаете.
Так, например:
CREATE TABLE myOldDates (
year INT,
month INT,
day INT,
-- otherstuff ...
)
Тогда все запросы будут выглядеть так:
-- get records between 5/15/1752 and 3/19/1754
SELECT * FROM myOldDates
WHERE
(year = 1752 AND ((month = 5 and day >= 15) or month > 5) OR year > 1752)
AND (year = 1754 AND ((month = 3 and day <= 19) or month < 3) OR year < 1754)
Конечно, это уродливо, но примерно так же уродливо для запросов диапазона, поэтому, как только вы напишите его в первый раз, вы можете инкапсулировать его в функцию.