First thing I notice is that you are using a lot of casts e.g.
CAST(B.DateD AS DATE) BETWEEN CAST(A.StartDate AS DATE)
. Change your database to store dates as dates, get rid of the casts and you should notice a profound improvement
You will need to share details of your table/view schemas for a fuller analysis
Edit: On a second look I want to draw your attention to the sub-query
SELECT DISTINCT B.DateD, A.Employee_Name
FROM ROM_Employee_Master A, DIMDATE B, ROM_Contracts C
WHERE CAST(B.DateD AS DATE) BETWEEN CAST(A.DOJ AS DATE) AND C.EndDate
That is pre-ANSI 92 syntax which is limited and confusing. It is incredibly easy to product cross-joins and that is what you have done here.
If you alter that to the more robust and flexible (and clearer!) ANSI 92 method of using Explicit Joins you can see the problem
SELECT DISTINCT B.DateD, A.Employee_Name
FROM ROM_Employee_Master A
INNER JOIN DIMDATE B ON CAST(B.DateD AS DATE) BETWEEN CAST(A.DOJ AS DATE) AND C.EndDate
INNER JOIN ROM_Contracts C
there is nothing to limit the rows coming from ROM_Contracts, so you are going to get a row in your results for every single row on ROM_Contracts repeated for every single row returned from ROM_Employee_Master joined to DIMDATE.
That will explain why it takes hours to run.
Once you have tidied up your joins you will probably be able to see that you don't need the sub-queries at all. Again, that will aid performance