в общем, т.к. внятного решения нет, думаю реализовывать такой вариант: при загрузке страницы js прогоняет все ячейки через проверку. при проверке берется ячейка с наименьшей высотой, как эталонная. далее, каждый элемент проверяется на соответствие этой высоте. если высота не соответствует (элемент выше), то для элемента увеличивается grid-column: span на единицу. т.е. если высокий элемент имеет span 1, то подставляем span равный 2 и проверяем высоту. если высота стала эталонной, то берем следующий элемент. если нет - опять span увеличиваем на единицу и т.д.
вешаем обработчик на изменение ориентации, чтобы он пересчитывал значения для разных экранов.