1. В таблице заявок в поле статуса хранить json вида
В MySQL так делать не стоит, JSON поля не индексируются.
Я бы сделал так:
Создаём таблицу нужной структуры, добавляем поля:
status - ENUM (список), из двух пунктов, типа accepted/rejected. Если значений не много - список вполне подойдет.
status_comment - комментарий к статусу, который заполняется только в случае, если статус стоит как "отказано".
*Фактическое наличие поля в таблице - не говорит об обязательности его заполнения.
Если статусы планируется в последствии добавлять, можно сделать ссылку на доп. таблицу со статусами.
Или, статусы можно отмечать просто цифрой, например,
0 - отказано
1 - принято
2 - в процессе принятия решения
и т.д.
А текстовое описание каждого статуса хранить в виде констатнт класса/структуры/объекта внутри Вашей программы.
P.S. Если принципиально важно, что бы при любом статусе отличном от "Отказано" не было комментария к статусу, именно на уровне БД - на таблицу можно повесить триггер, который это поле будет очищать.