Using time-based caching headers means the client will not ask the server at all whether a file was updated for a while.
Using Etag caching headers means the client will ask the server every time, but the data does not need to be transferred every time.
Both methods have their pros and cons. For assets which rarely ever change, you should use time-based cache headers, since this will take a lot of load from your server. To still have those update as soon as they are updated, adding a unique token to their URL is a good idea. For assets which often update, using Etags without time-based cache headers (or very short lived ones) is a good idea since it means they'll update as soon as they update while still taking load off the server. Typically you want to Etag your dynamic web pages and time-cache your image assets.
So, yes, adding an md5 hash to the URL of static time-cached assets is a good idea, if having the client download the updated version ASAP is a real concern. Make sure adding those hashes is not more overhead than you save though.