Are structs as fast as arrays now?
It is a strange question because you have just as many tools as anyone else to answer it. Have you attempted to answer it?
structs, like instances, implement some sort of map for their reflection (e.g. varaible_instance_*, variable_struct_*) Depending on how a map is implemented it could have constant time for random access (e.g. a hashmap with a very good hashing function).
Even though arrays in GML seem to have alot of 'list' like functionality I would assume they have constant time for random access.
We don't have access to the implementations so we (you) could test those empirically. I would suggest making an array with 10000 elements and a struct with 10000 variables, and randomly access the elements a few million times. Measure the difference in performance between the two and you will have your answer for access. Then do the same for adding and inserting, deleting, resizing etc..
More importantly, structs are not arrays. They lack the interfaces and aren't really replicable. Arrays can act like structs, but structs can't act like arrays. e.g. you can't sort the elements of a struct. variable_struct_get_names is a very poor substitute for iteration.
I think it is a bit sad the manual recommends using structs as maps. Even if they have a map implementation for their member access, its still convoluted af. Using structs in place of arrays would be facepalm worthy. So even if they had similar performance I would still say structs in place of arrays would be a bad idea. I know you aren't suggesting that, and your question comes more from before 2.3 we used arrays like structs, since we didn't have structs.