Draw 2D circles/squares efficiently

I’m doing a lot of 2D simulations using Unity, and I usually instantiate a lot of squares/circles sprite. When the number of sprites reaches 1k or higher, the FPS usually reduces to 10-20, which makes everything really slow/unusable.

So my question is, how can I draw 2D squares/circles with less impact on frame rate? The only requirements are that the color, position and scale of individual squares/circles must be changeable (for the simulation), and the squares/circles must be filled (with that color).

I dont have much experience with it but try to look at GPU instancing. That may be what you are looking for.