Свойство CSS для удержания строк это widows и orphans (первое задает минимальное число строк текста, которое располагается на следующей странице, второе для предыдущей. При конфликте приоритет у widows).
Осталось дело за малым... правильно их "прикрутить".
На сколько я понял, надо, к примеру, подзаголовок и последующий текст помещать в отдельный контейнер... На этом пока произошла остановка.