2500 of packed sprites on the screen easily put CPU to 100%
Are you sure this isn't just the node cost, if you are using .tres files, you probably use a node for every sprite.
In Godot, even a empty node has a high overhead.
To test this, just make a new scene and place 2500 of the icon image provided with Godot. If you still get low performance with the icons it is the nodes.
However, if the single icon rendered 2500 times, runs smoothly then you know it is the draw calls; because rendering the same sprite should have very few draw calls.