Можно оставить как в первом варианте.
Просто стили будут определяться так:
// Если есть общие
.c-card__title {}
// Ну и при каких-либо отличиях
.c-card__header .c-card__title {}
.c-card__footer .c-card__title {}
Либо оставить первый вариант и для
.c-card__title
добавить модификатор
.c-card__title--header
или
.c-card__title--footer
и на него вешать стили.
В итоге будет так:
<div class="c-card">
<div class="c-card__header">
<h2 class="c-card__title c-card__title--header">Заголовок</h2>
</div>
<div class="c-card__footer">
<h2 class="c-card__title c-card__footer">Заголовок</h2>
</div>
</div>
Но я все таки остановилась бы на варианте с каскадом в стилях.