1.
Не понимаю на чём вы планируете выйграть во втором случае.
Индексов больше, внутренних запросов больше, кэширование хуже, и так далее.
Если уж и задумываться об оптимизации гигантских таблиц, то существует партиционирование.
2 вариант имхо лучший.
Дабы избежать коллизий того типа о котором вы упомянули достаточно хранить только измененное поле/поля в одной записи в таблице ревизий, а остальные — NULL.
Декомпрессия в фоне?
Или если не нужна совместимость с IE/Opera, то можно вполне и Byte Arrays использовать, что ускорит неимоверно, и позволит отказаться от фона.