Joining in-memory dataframe with very large persisted table in a db?
Only option I see is saving dataframe into db, doing join on db server and bringing in data back. But seems so clunky.

This sounds like the most efficient option in terms of compute time.

I've read about dask as an option, but not really sure about that one because bringing entire table in-memory/disk still doesnt seem like an efficient technique to me

If your dataframe with the entries that you care about is small then Dask Dataframe probably won't read everything into memory at once.  It will likely scan through your database intelligently in small space.  The real cost of using Dask here is that you need to move data in and out of the database, which will be slow or fast depending on your database connector.
I would try it out, and see how it performs.
I've a dataframe in-memory which has certain identifiers, using those identifiers i want to fetch only relevant data from a very large(500M rows) table persisted in a RDBMS(Sql server).
What's the best way to do this? Definitely don't want to bring the entire table in-memory. And can't loop through either. If it was single column key to lookup, I could still think of building a comma-separated string and doing IN clause against that list but I've multiple fields that are identifiers.
Only option I see is saving dataframe into db, doing join on db server and bringing in data back. But seems so clunky. 
I've read about dask as an option, but not really sure about that one because bringing  entire table in-memory/disk still doesnt seem like an efficient technique to me