Лично я бы пошел на решение "[a]".
Разделение элементов на два набора таблиц (текущее и архивированное) усложнит управление с точки зрения общих концепций СУБД (пример: автор комментариев на форуме будет внешним ключом, указывающим на таблицу пользователя ... но вы не может иметь поле, которое ведет себя как внешний ключ для двух разных таблиц).
Вы могли бы пойти на компромисс (таблица пользователей использует решение "a", все другие таблицы, такие как профиль, архивируются в двойную таблицу, как для решения "b"), но это усложнит ваш код (в некоторых случаи, в которых вы должны смотреть на неархивированные, в некоторых только на архивные, в некоторых других на объединение обоих).
Решение A также легко решило бы требования № 2 и № 3. Уникальность имени пользователя легко реализовать, если все находится в одной таблице, а воскрешение заархивированных пользователей - это всего лишь вопрос переключения (Archived = Y / N) на главную таблицу пользователей.
10% не так много, я сомневаюсь, что разница в производительности действительно оправдает дополнительную сложность (и риск ошибок).