Если блоки создаются один раз и далее не редактируются, то хоть на салфетках храните в виде карандашного рисунка, далее по запросу юзера сканируются все салфетки и выдаете юзеру сканы, он эти картинки комбинирует и отправляет заказ - салфетка номер 28 плюс салфетка номер 92 плюс салфетка номер 99. ВСЁ!
Ну а если без шуток, у вас типичная ошибка начинашки - структура проекта не проработана ни на полграмма, типичное поведение начинашки - встал вопрос, потекла идея, бегом на Тостер, авось профи подскажут...
Хрен вам!
Додумаю за вас- Конечно же блоки надо будет редактировать, не юзерам, так менеджерам, поэтому хранить html-код блоков надо или в БД (тот же ModX именно так хранит все шаблоны) или как вы выразились - в файлах плюс пути в БД.
Оба варианта равноценны по оптимальности вплоть до ошибки в расчетах населения Земли к 2050 году.
Все дело в том, что указанный проект никогда не будет мега-проектом в 1млн посетителей, это следует из тематики (в яндексе запрос конструктор html-писем выдает три миллиарда ссылок), поэтому любая оптимизация подобного проекта начинашки с посещалкой 50 человек в день бессмысленна на 200%.