I'm surprised that it works at all. Request Scope is almost 100% useless in
JSF.
In particular, it's useless for dataTables, because there's an intermediary object (the DataModel object) that's used to manage cursoring and line tracking for dataTables. I recommend that you create one explicitly, since if you don't, JSF will create an anonymous one anyway, but you won't have a way to take advantage of the DataModel's data-tracking functionality if it's anonymous.
The problem with Request Scope for a DataModel object is that it keeps critical information between page requests. But a Request-scope object gets
destroyed between page requests. So your anonymous DataModel is being re-created as a blank object every time someone does a submit (including AJAX submits).
You should consider doing some sort of windowing on the back-end. 5000 records is a lot of precious server memory. Not too many users could visit that page at the same time before you ran out of RAM. Besides, after the first thousand records or so in the display, my eyeballs tend to start bleeding.
The secret of how to be miserable is to constantly expect things are going to happen the way that they are "supposed" to happen.
You can have faith, which carries the understanding that you may be disappointed. Then there's being a willfully-blind idiot, which virtually guarantees it.