В любом сложном приложении WinForms вы, вероятно, столкнетесь с проблемой слишком большого количества элементов управления в форме. Не то чтобы вы столкнулись с жестким ограничением, скорее вы столкнетесь с болевым моментом - таким, как вы описываете.
В большинстве сценариев для меня вариант № 1 - пользовательский элемент управления для каждой вкладки - наименее болезненный подход. Это позволяет вам инкапсулировать логические разбивки элементов управления по-своему, определяя их соответствующим образом.
Недостатком этого является то, что вы, вероятно, в конечном итоге выставите либо тонна свойств на свой пользовательский элемент управления. Однако выход из этой проблемы довольно прост: используйте пользовательский класс для представления данных, которые «привязаны» к указанному элементу управления, а затем предоставьте одно свойство для связанного экземпляра класса.
В целом у вас будет лучшая архитектура, вы будете более удобны в обслуживании, и в качестве дополнительного бонуса вы не будете сходить с ума, пытаясь заставить форму работать. :)
EDIT:
Я должен отметить, что вам также может понадобиться предоставить некоторые пользовательские события из пользовательских элементов управления, которые представляют ваши вкладки. По сути, если на вкладке есть элемент управления, событие которого необходимо для родительской формы, вам придется создать событие и вызвать его так, чтобы родительская форма знала об этом. Это не очень сложно, но может добавить значительные LOC для пользовательских элементов управления.