Ну, во-первых, если вы ходите выбрать все актуальные записи на дату date1, то запрос должен будет выглядеть вот так:
select * from history
where PERIOD_BEGIN > date1 and date1 =< PERIOD_END;
Во-вторых подобный подход к созданию исторических таблиц мне не нравится по нескольким причинам, главная из которых, то что актуальные записи физически соседствуют с историческими.
Ну а в остальном, думаю, вам подойдет примерно такой набор индексов: (ID, PERIOD_BEGIN, PERIOD_END) - чтобы искать конкретную запись на конкретную дату, (PERIOD_BEGIN, PERIOD_END) - чтобы искать много записей на конкретную дату... Например так.
-------------------------------------------------------
Автор благодарит алфавит за любезно предоставленные ему буквы.