Yes, you can load all the search data at application startup, in a single call that returns multiple result sets. The Winforms application I inherited did just that, but the trade-off was that the startup time was terribly slow, since it took a few seconds to call the web service, which was made to retrieve the search data from the database to return all cached results, to execute. If this is a problem, you need to run an asynchronous call to the database / web service, so when executing the database code, more initialization work may happen. If you need to make sure that the data has been returned before the user completes a specific task, for example, by clicking on the button to display a screen with one or more of the lists requiring cached data, using one or more Winforms timers can help as well.
Another way to help performance might be to make a data access call in a separate thread, although in the project I was working on, I found other options sufficient to reduce startup time from about 10 seconds to less than 3 seconds without having to deal with multithreading difficulties.
Paulr source share