Make sure you’re using LODs for all your meshes. This can greatly help with performance issues, especially if you have a lot of meshes in a single view.
Next you can setup a cull distance. You can do this either by using a min and max value for the distance set in the details panel for the individual mesh, or if you’re using the foliage tool you can adjust the start and end distances under the show instance settings.
The other option is to use a Cull Distance Volume and set the values there. Anything meeting the criteria in this volume will be culled from view within the set range.
You can read more about Culling here:
Another consideration as well would be setting which meshes can or cannot cast dynamic shadows.
If you’re using the foliage tool, make sure to uncheck cast shadows on something like a grass mesh. Grass typically does not need to cast shadows and you can save performance there. This will not stop shadows from being cast onto your mesh, but it saves performance from calculating shadows for thousands of grass meshes.
For Level Streaming see the following documentation. This should help explain how to not fully load your level at once:
I hope this helps.