In 2D, streaming content would be something you only need for a complex open world I think. Working in games, I've seen really big levels run smoothly on low-end hardware without having to do anything special regarding loading.
The main thing you want to do for performances is, if you have some complex AI or objects that use a heavy _process or _physics_process function, use a VisibilityEnabler2D node:
with it, you can disable _physics_process and other features automatically when the node goes out of the screen. That will give you a big optimization easily.
In this project, we split levels into different scenes so you only have one loaded at a time. Whether your game uses a huge open world map or not, you will want to split it into separate scenes like that. Then if you have a huge level that causes performance issues, you can code a system to lazy load levels. I would have to experiment there to see how to code it so that the player doesn't see or feel anything, but the only way to experiment with that is to have that huge map with lots of AIs and objects in the first place.
Until you have something that complex, there's no need to complicate your game code with early optimizations you may not need.