Использовать собственные минифицированные теги, благодаря которым определенный парсер будет воссоздавать нужные блоки с помощью компонентов (возможно динамичесих)
20 лет назад этот вопрос был полнонстью решен с помощью технологий
XML/XSLT/XPath.
Языки C#/dotNet, Java поддерживают этот стек. И много других языков и библиотек.
Потом еще создавали более простые вещи. Шаблонизаторы.
Velocity, FreeMarker. Они немножко
переворачивают постановку. Но их тоже можно рассмотреть.
Хранить html код в столбце поста кажется нецелесообразным.
С точки зрения суммарной стоимости владения (TCO) база данных всегда будет дороже
чем файловая система. А самым дешевым будут хранилища типа Amazon S3, MS Blob, G-Drive.
Ну если пересчитать удельно сколько стоит гигабайт.
Хранить каждый элемент поста отдельно в бд со следующим содержанием (element_name, position, content, post_id),
Тут - непонятно. Но есть такое эвристическое правило дизайна
хороших NoSQL систем.
Все данные для запроса должны лежать физически рядышком
и не требовать дополнительных действий. В идеале - для отдачи поста вы должны сделать
один единсвтвенный SELECT без joins и без подзапросов и агрегаций и без CONNECT-BY.