Ну вот у меня тоже была гипотеза, что под капотом он всё-равно хеш-таблицу и там и там использует. Но думаю тут дело именно в том, что набор полей постоянно меняется.
Поэтому эффективней как раньше - иметь ограниченный набор полей (не более числа декорированных методов), а неограниченные лучше выносить в отдельный объект. Тогда первый может быть оптимизирован скрытым классом, а второй даже не будет пытаться.