you probably need to rewrite the query and remove "TOP" clause - it executed on local server, not remote, so you pulling entire resultset between boxes.
simplest way
Declare @MetricDate smalldatetime
Select @MetricDate = MAX(MetricDate) from Server1.MyDatabase.dbo.MyTable where col4 = @ZipCol AND col1 = @DOB
SELECT @DOB, col2, col3
FROM Server1.MyDatabase.dbo.MyTable
WHERE col4 = @ZipCode
AND col1 = @DOB
AND col5 = @MetricDate
best way - OPENQUERY per suggestion above
index should be by col4,col1,MetricDate - your modification misses col1