К сожалению браузеры не умеют убирать висячие строки. Так что универсального решения Вы не найдете. Либо все переверстывать вручную, используя таблицы, выравнивания, margin и т. д., либо попробовать написать js скрипт (или поискать готовый), который справится с этими строками.
Алгоритм видится следующий: функция берет абзацы, последовательно считает высоту, складывая. Если Высоты превышает высоту обтекаемого объекта, то дальше уже эта сумма сравнивается с высотой обтекаемого объекта, разница делится на высоту строк. Если получается больше 2, или 0 при округлении, то проблемы нет, если 1, то значит есть висячая строка и абзацу/абзацам лучше задать постоянную ширину, ну или попробовать висячую строку в спан и relative'ом пододвинуть.
Хотя возможно это велосипед.