You could just set an opacity to all other cards except the candidate one. If you don't like this approach I think all solution could be accepted. It's very dependent on the whole layout so you can't say that the best solution is the 1 or 2 or 3
I think there are couple of UX issues that needs addressing:
Search Criteria - you mentioned that search function gets triggered only after a certain number of characters are entered into the search field. I'm guessing users are not aware of the number of characters required? This potentially can create a doubt in users' mind. This could lead to UX issues ...
The first thing you should do is do some hall way testing to find out if it is indeed a problem. Don't make assumptions.
The second thing is to find out if users are mostly content with the first few results. If they are, you can just show the first few results and provide a button to show more or add pagination.
If this design just needs some adjustment ...
Your design looks fine. As you've mentioned, users are not dumb, they know how to scroll.
When people search for something, they usually want to get less options from many. They won't care about all available results as long as one or a few first of them solve their problem. So it is better to focus on the quality of searching and ordering, not on precise ...
I like your idea with displaying the number of results.
Other ideas could be
Display scrollbar or some other indicator of scrolling to indicate more results (see android app drawer)
Only load the 20 first results and add a 'more' button to the bottom which will load more (endless scrolling)
Add pagination to the bottom of the page