Как обновляют структуру БД и данные на продакшене?
Поскольку вопрос о трансформации имеющихся данных - то индивидуально для каждой задачи.
Начать необходимо вот отсюда: https://habrahabr.ru/post/146901/
И, собственно, придти к выводу, что лучше оставить как есть в одном поле. Если в каких-то местах нужны другие формы обращений - прописать их явно, а не конструируя по имеющимся заблуждениям о фио.
А так:
0) делается дополнительный бекап
1) выкатывается alter table добавляющий новый поля
2) выкатывается приложение, умеющее писать синхронно старую и новую структуру, но читающее только старую
3) отдельным процессом в цикле небольшими частями преобразуются данные - это если подлежит автоматической обработке
4) выкатывается приложение использующее только новую структуру
5) архивируется и удаляется исходная структура
Для всего-то тысячи записей может проще будет залочить табличку на несколько секунд.
Если тривиальной автоматике обработка не подлежит, то часто вместо 3 пункта делают выгрузку primary key, source_data, как-нибудь изменяют и готовят csv primary key, source_data, new_data, копируют в temporary table, затем делают слияние мультитабличным update этих двух таблиц с recheck'ом по source_data. Затем выгружают данные для которых не было обновления, разбираются, ещё раз обновляют и т.д. до заполнения всего.
и запустить миграцию на продакшене, данные удалятся. 
Это какая-то плохая миграция, если данные удалятся. Ну точнее это не миграция а непонятно что.
https://book.cakephp.org/3.0/en/phinx/migrations.h...
Случай который у вас реализуется так (это если можно остановить работу приложения на время миграции, если нельзя то будет сложнее конечно):
1) создали новые колонки;
2) залили insert-ом с select-ом с разбиением на ходу;
3) удалили исходную колонку.
Пример как раз такого разбиения которое вам нужно https://github.com/LandRushGIS/Cadastre.Russia/blo...