In an 'Search’-entity associated to de user you can fill the fields you want and give the possibility to the user to change this fields.
Then you build a Datagrid within a data view (with search-entity) with as Data Source: Microflow. As input in this microflow you can give the Search-Entity.
Maybe a little vague, but I hope you understand. :-)
It sounds like the Grid Filter Extension widget can be useful for storing past searches. You could use a constraint to the entity that stores the search filter settings to the current user to make history user specific.
For storing sorting, in the past I’ve used the datagrid extension widget. In the appstore its not being maintained anymore but on github I’ve been using this version that has been working well with Mx7.
Hope this helps!
A quick (dirty) way is to have several grids, visible depending on a boolean var.
example : edit condition for visible for John = true
careful if you have several association or a complex xpath. might slow the refresh page.