Как правильно делать по бэм?
почему вы всегда забываете, что блоки вы можете плодить как угодно и где угодно. вкладывать блоки внутрь блоков тоже сколько угодно.
в твоем случае, если у тебя меню получается слишком громоздким, то сделай из него отдельный независимый блок.
который даже к header может не относиться. т.е. внутри .top-header у тебя будет блок .main-navigation или .main-menu
и использовать уже сможешь его не только в хедере, а где угодно.
Сделайте себе привычку добавлять кастомные\дополнительные стили по такому алгоритму

header class header
    nav class nav header__nav

где class="nav" вы описываете стили, которые применимы только к навигации, что позволяет вам помещать блок nav сколь угодно раз, и куда угодно. Аheader__nav отвечает за позиционирование navвнутри блока header, так как nav является дочерним элементом блока header.

По итогу когда вы сверстаете макет, у вас получится куча независимых блоков, и сетку + позиционирование вы будете делать уже добавляя блок__элемент = позиционирование