Как вариант: сначала обернуть контент, затем блок с контентом и заголовком обернуть в ещё один враппер. С первой ситуацией всё просто: у рисунка проставляем ширину и float: right, у враппера display: flow-root. Для второй ситуации: включаем флекс с переносами для основного контейнера; у враппера делаем display: contents, чтобы он вообще не учитывался; у заголовка меняем позицию order: -1 и ширину в 100%. Из минусов метода: как минимум одна лишняя обёртка.