Hi Pedro,
First of all , beter to use the Gallery widget instead of List view. The Gallery widget performs way better and smoother and has default search input filters you can place at the top area.
If the default filter widget is not sufficient, fall back on a nanoflow. I have good experience with a nanoflow and the 'contains' constraint, it takes just milliseconds to show the results.
How do you synchronize the data to the device? Do you synchronize all the data to the device and give them the option to filter in the available data or do you get the data by MF with the synchronize to device activity the moment they are going to search?
How does the page and your filter look like? You have a search string with a datasource NF? Maybe a screenshot would help to get a better idea of the situation.