В использовании ViewBag.Title = "My Title" нет ничего плохого;
Все, что вы делаете, это используете динамическое свойство.
Вопрос в том, где информация должна быть «объявлена».
Т.е. где он наиболее доступен для текущих целей.
Если это для каждой страницы, то это правильное место.
Если, однако, заголовок страницы может быть получен из Модели, то вам следует это сделать.
В этом случае я бы, вероятно, использовал бы базовый класс для используемой вами ViewModel и создал бы там свойство PageTitle, содержащее логику для получения заголовка страницы из свойств в модели.
Итак:
<title>Model.PageTitle</title>
Таким образом, лошади для курсов и не бойтесь использовать динамические свойства ... до тех пор, пока вы понимаете, что они и что они делают.