Sei obbligato a usare un array o puoi sbizzarrirti?

Il tuo problema si risolve in modo molto semplice con linq, con un paio di righe tipo queste:
codice:
        Dim visibili As IEnumerable(Of MyItem) = collection.Where(Function(f) (f.Visibile = True) And (f.Acceso = True)).OrderBy(Function(f) f.Data)
        Dim nonvisibili As IEnumerable(Of MyItem) = collection.Where(Function(f) (f.Visibile = False) And (f.Acceso = True)).OrderBy(Function(f) f.Data)
Ho omesso il codice per definire la classe (MyItem nel mio esempio), poco significativo.