Здесь написано, что свойство Visible есть, а по факту его нет 
То есть, написано, что не может применяться для данного контрола.
Если, по факту, такого свойства нет, то зачем тогда целую страницу под него выделять? 
И как тогда скрыть вкладку?
В Delphi, почему-то, смогли это сделать в лёгкую 
Получается, надо хранить идентификаторы вкладок отдельно и по необходимости добавлять/удалять их из TabControla? 
Типа так:
foreach (string s in Environment.GetCommandLineArgs())
{
if (s.ToLower().Equals("/debug"))
{
config.debugMode = true;
break;
}
}
if (!config.debugMode)
{
tabControlMain.TabPages.Remove(tabPageDebug);
}

Да, похоже только через Remove.
Видимо унаследовался от Control.
А страница для того и нужна, чтоб предупредить о бесполезности свойства )
Бесполезность и отсутствие - немного разные вещи.
Это получается, что одну и ту же вкладку можно засунуть в разные TabCotrolы? 
Вряд ли, они меняют .Parent.