Hi Simon,
1. As Mark mentioned , there is no way to get estimate for time (at least I don't know any), but you can get cost/lio/pio estimate, what may bring some idea to you about time ETA. But you should keep in mind that the main purpose for this cost to get comparable measure of the plan efficiency. And estimated lio may appear to be far from actual due to the inaccurate statistics .Also you should double check that the actual query is running with the same plan for which you got the estimate.
set plan for show_best_plan_xml to message on
go
set textsize 100000
go
set noexec on
go
<here your query>
go
set noexec off
go
select showplan_in_xml(0)
go
2. To check how far the process is (actual lio/pio) you may check following mon tables:
monProcessStatement (compare StartTime to current time to see how long the statement is runnig), monProcessObject (how many ios on the objects you have), monProcessActivity