В целом вы правильно мыслите, но пришли немного к неправильному выводу.
- Миксы лучше использовать для позиционирования блока либо модификации блока в контексте другого блока. Например у нас есть contacts и помещая его в header, даже если ничего не менять, желательно сразу задать ему header__contacts потом может пригодиться.
- Если необходимо менять элементы блока внутри контекста другого блока, блока то можно миксовать элементы. Например: contacts__img header__contacts-img немного тавтология, но в небольших порциях уместно
- Но если модификации могут быть неоднократными, то нужно модифицировать сами элементы: contacts__img contacts__img_type_1, тут уже нужно смотреть на контекст проблемы, например если у вас иконка и она где-то слева и где-то справа, то можно задать ей правила с отступами слева и с права в независимости от того какой тип блока: contacts__ico_margin-right_small или contacts__ico_margin-left_large. Это модификатор КЛЮЧ-ЗНАЧЕНИЕ где в ключе мы указываем что у нас существует отступ _margin-left и такой отступ может быть только один, а значение, это размер отступа _large
Придерживаясь правил выше можно полностью решить практически любую задачу, но и такое иногда приходиться применять .card_type_1 .card__img, но обычно это хотелки заказчика/бекендщика, мол хочу чтобы я добавил класс и все изменилось, тут как бы выбора не остается.