How to deal with big files containing lots of coordinates with OpenLayers v2.13?

I have on OpenStreetMaps map with a vector layer containing all USA's states shapes.

These coordinates are stored in a MongoDB database, and when the user wants to display the map, my server (running under Node.js) computes a GeoJSON file with these coordinates and sends it to the client.

The problem I have is that this file can be very big (~20 Mo) because these shapes are very detailed so there are a lot of coordinates, even for one state. Even when gzipped the file remains big (~3-5 Mo). I can't send such a big file, for bandwidth and Javascript memory considerations.

So I'm looking for a scenario that would allow me to send all these coordinates with a reasonable bandwidth and browser memory usage.

Any suggestions?

Thanks