Indeed StructArrays.jl works well here:
julia> using StructArrays
julia> X = [
(;a=(x=1,y=1),b=()),
(;a=(x=2,y=3),b=()),
]
2-element Vector{@NamedTuple{a::@NamedTuple{x::Int64, y::Int64}, b::Tuple{}}}:
(a = (x = 1, y = 1), b = ())
(a = (x = 2, y = 3), b = ())
julia> Y = StructArray(X, unwrap=t -> t <: NamedTuple)
2-element StructArray(StructArray(::Vector{Int64}, ::Vector{Int64}), ::Vector{Tuple{}}) with eltype @NamedTuple{a::@NamedTuple{x::Int64, y::Int64}, b::Tuple{}}:
(a = (x = 1, y = 1), b = ())
(a = (x = 2, y = 3), b = ())
julia> Y[1]
(a = (x = 1, y = 1), b = ())
julia> Y.a.x
2-element Vector{Int64}:
1
2