Ваш способ интересный, но возможны ситуации, когда константа (Who) ошибочно применена ( для индексации положения бита в слове) не к той структуре, для которой она предназначена.
И таких констант в программе при упаковывании битов может быть несколько сотен...
Компилятор такую смысловую ошибку не заметит, ведь синтаксис не нарушен, а константу можно использовать для любых целей
const
who:byte:=3; (*адрес бита в structrure_1 *)
regime:byte:=5; (*адрес бита в structrure_2 *)
strusture_1.who:= FALSE;
structure_2.who:= FALSE;
structure_2.regime:= FALSE; (* ошибка *)
для автоматического выявления такой ошибки, нужно сделать ее синтаксической для компилятора, например объявить who или regime элементами своих структур, а чтобы не было вопросов с выравниванием при сетевом обмене, сделать из 16 битными.
в итоге - за такое удобство придется заплатить тем, от чего пытались уйти.