The problem is that the query in question runs very slow when compared to the query run with one or two, rather than all three of its conditions.
Now the query.
Select Count(*)
From
SearchTable
Where
[Date] >= '8/1/2009'
AND
[Zip] In (Select ZipCode from dbo.ZipCodesForRadius('30348', 150))
AND
FreeText([Description], 'keyword list here')
The first condition is self explanatory. The second uses a UDF to get a list of Zip Codes within 150 miles of 30348. The third uses a full text index to search for the provided words.
With only this condition
[Date] >= '8/1/2009'
The query returns 43884 (table size is just under 500k rows) in 3 seconds.
Using only this condition
[Zip] In (Select ZipCode from dbo.ZipCodesForRadius('30348', 150))
I get 27920, also returned in 3 seconds.
And with only the full text portion
FreeText([Description], 'keyword list here')
68404 is returned in 8 seconds.
When I use just the zip code and full text conditions I get 4919 in 4 seconds.
Just the date and full text conditions gets me 9481 in just shy of 14 seconds.
Using the date and Zip Code conditions only gives me 3238 in 14 seconds.
With all three conditions the query returns 723 in 2 minutes, 53 seconds. (wtfbbq)