Generally, if you start working with big query size problems like this, this is a good opportunity to take a look at optimization methods instead of overriding. Many people tried to provide ways to get around the problem, but did not provide an idea of ways that did not bypass it, but instead improved the design to be easier.
Here are a few possibilities:
Have you considered the swap request (s)? This will allow you to download data on the client asynchronously as needed, thereby preventing too long requests, improving the responsiveness of the website and reducing the load on the client and server memory. You can preload the data in the form of user scrolls and, if necessary, provide the user with some kind of entertainment / feedback if the process takes too long, so they know that more data is loading.
Have you considered changing the names of properties, which should be shorter and less visual, reducing the area of the object itself? For example:
Current Model:
{ name:null,operation:0,selected : false}
Simplified Model:
{ n: null, o: 0, s: false }
This approach will make it difficult to read JSON itself, but JSON is not intended only for reading by people, but for serializing data; although this can be overcome by documenting your model. Performing this method can help reduce the amount of data sent by up to 30%.
I can’t provide a complete approach to the solution, because you have to ask yourself many difficult questions about what you are trying to achieve, who will consume the data and how best to get there.
In addition, I would think a lot about why the process will require the user to interact with 2000+ records at the same time. I'm not trying to criticize, but I say that you need to look critically at the business process for what you are trying to achieve, because there can be serious problems with repeatability, stress on the user and much more, which will significantly affect how your applications will be effective and beneficial to the end user. For example, is it possible to break a task into smaller, less tedious blocks so that the end user does not look at 4000 flags for 2 hours?
This may not be the answer you are looking for, since it opens up a huge number of additional questions, but I hope this helps you to begin to formulate questions that will help form the final answer.