Basically what you want to do is make up lists as you need them. If you redraw terrain objects all in one go, a list of just them could be handy. But for this to be worth while you'd need tens of thousands of them, and many 10,000's of things that are not terrain. Otherwise perusing your list-of-everything and using an "if" to pull out terrain objects is plenty fast enough.
I've always needed one master list, regardless of how many other lists I've had. Usually I make it a Map, or keyed table, or dictionary, of some sort so I can randomly access individual items. But a simple list is a lot simpler; if you don't randomly access game objects you don't need the Map. And the occassional sequential search through a few thousand entries to find the right one won't take long. So I'd say, whatever else you do, plan to stick with the master list. Consider using a Map if it gets big. (Though if you can use indexes instead of keys, you can stick with arrays and have something a lot better than a Map. I always ended up with big gaps between index numbers, so I had to give it up.)
A word about arrays: they are unbelievably fast. But when they get up around 100,000 elements they start to give Garbage Collectors fits. If you can allocate the space once and not touch it afterward, fine. But if you are continually expanding the array, you are continually allocating and freeing large chunks of memory and are apt to have your game hang for seconds at a time and even fail with a memory error.
So faster and more efficient? Sure. A Map for random access. For really large lists, a Linked List will beat an array if and when you don't need random access. Multiple maps/lists to organize the objects in various ways, as you need them. You could multi-thread the updating.
But it's all a lot of work. That single array is fast and simple. You can add other lists and things only when needed, and you probably won't need them. Just be aware of what can go wrong if your game gets big. You might want to have a test version with 10 times as many objects in as in the real version to give you an idea of when you are headed for trouble. (Only do this if your game is getting big.) (And don't try the multi-threading without giving it a lot of thought. Everything else is easy to get started with and you can do as much or as little as you like and back off any time. With multi-threading you'll pay a big price to get in, the dues for staying in are high, and it's hard to get back out.)
In other words, just keep doing what you're doing. Your biggest limit is probably your own time, and you are making the best possible use of that.