Usually, when faced with requirements like these, I grab the various “columns” into hash buckets, just so that I can easily refer to them by name. (I also use use constant to define those names in the code.)
Then, when it comes time to actually generate an array out of the thing, I simply iterate through a qw// list of those strings, so that it is the order of the entries in this list (effortlessly changed to suit the present whim of the marketing department ...) that defines the column-order. You can rearrange them to your heart’s content and nothing else happens throughout the code.
By contrast, if you try to use actual array-indices ... well, the day will come when the third change of the day happens and “you miss just one of them ...”