Начнем с того, что columns свойство странное, точнее распределение по колонкам. Зависит от размера блоков.
Чтобы не было переноса внутри мелких блоков, им задают display inline-block.
Для прокрутки нужна дополнительная обертка с ограниченной высотой. https://jsfiddle.net/pqf69j81/
При том "контенте", который у автора сейчас, колонки творят ерунду (в комментариях код). Но надеюсь, что вживую контента будет больше и выглядеть оно станет нормально.
Так же при нехватке высоты добавляет колонки, хоть и указываю, что надо две.
Еще и контент переносит внутри дочерних блоков, а нужно только дочерними блоками оперировать, как единицами.
По скроллу: скролла не будет, пока ты не дашь части с ограниченной высотой враппер с overflow: hidden;.
Поставь его на боди - и вот твой скролл.
По колонкам.
У тебя нет ограничений по ширине на родителе. Так почему бы флексу с колоночным направлением, при ограниченной высоте, не дать тебе 3-ю, 4-ю да хоть 10-ю колонку?
Дай на родителя max-width равный 2 ширинам твоих колонок по макету, а колонкам - 50% с паддингами и маргинами. Это как вариант.
И да, можно еще columns заюзать, но в твоем случае может стать проблема обрезания блоков по высоте. Тогда нужно дать потомкам инлайн-блочный дисплей.