I'v made an interface for a similar case recent month. I choose option 1.
Upsides option 1:
- It's clear it is a table (depending on your styling. A table header with no rows can be confused with all sorts of things)
- Search/sort/filter makes more sense if you see some dummy data.
I found a few downsides for option 1
- Shown results are useless.
- I saw one user using the pager to 'guess' on which page his required result (a username starting with 'B' would be. This was absolutely useless, since there is no way users can know this.
I started looking for a solution for those two downsides. In my case it could be useful to show the latest looked-up rows by the logged in user. (In my application, you can expand the row for details) So I suggest you search for any useful way to fill those first rows. Other examples could be: recently added, recently updated, about to expire, latest start date, most viewed, highest revenue, best selling... Or similarities with the logged in user, like a manager logging in would see users in his department. Or something completely different like showing users with upcoming birthdays, or products running out of stock...
Secondly, I replaced the pager with a 'load more' buttons. More on this subject here:
Regular pagination vs. infinite scroll
As final side note: Some could argue that a single-field centered Google-like search box is always more distraction-less en user-friendly. If the data is very structured, not like text-based web pages, filters and sorting are more logical. For exmaple searching for date-based data is done by a datepicker or sorting on latest/oldest and not by typing dates in a search-box.