For SIMD at least, the {mins[3], maxs[3]} representation aligns more naturally with actual instructions on x86. To compute a new bounding box:
new_box.mins = _mm_min_ps(a.mins[3], b.mins[3]);
Indeed. This is classic array-of-structs versus struct-of-arrays.
You would want [4] not [3], with the last one being padding. Of course, you can't always afford that.