The following queries run in an sproc targeting the ItemData table in SQL Server 2008R2:
SELECT TOP(500) ItemListID, GeoCity, GeoState, GeoDisplay, Title, Link, Description, CleanDescription, OptimizedDescription, PubDateParsed, ImageBytes, DateAdded FROM ( SELECT TOP(500) ItemListID, GeoCity, GeoState, GeoDisplay, Title, Link, Description, CleanDescription, OptimizedDescription, PubDateParsed, ImageBytes, DateAdded, ROW_NUMBER()
OVER( ORDER BY ItemListID DESC )
AS RowNumber
FROM ItemData
WHERE CONTAINS(Title, @FTSSearchTerm ) -- ' + @OriginalSearchTerm + '"')
AND ( WebsiteID=1 AND
(@GeoCity = '-1' OR GeoCity = @GeoCity) AND
(@GeoState = '-1' OR GeoState = @GeoState) )
) ItemData WHERE RowNumber >= ( @PageNum - 1) * @PageSize + 1 AND RowNumber <= @PageNum * @PageSize ORDER BY ItemListID DESC
SELECT @NumberOfResultsReturned = @@ROWCOUNT
SELECT @ActualNumberOfResults = COUNT(*) FROM ItemData WHERE CONTAINS(Title, @FTSSearchTerm ) -- ' + @OriginalSearchTerm + '"') AND ( WebsiteID=1 AND (@GeoCity = '-1' OR GeoCity = @GeoCity) AND (@GeoState = '-1' OR GeoState = @GeoState) )
Depending on the data the query uses either CONTAINS or FREETEXT.
With load this query runs very slow and peeks the server at 100%.
I have set the following indexes:

What do I need to do so these queries stop running so hot?
Thanks.
— UPDATE —
The table has one clustered index which only consists of ItemListID, and FTS on Title and Description.
I have added a non-clustered index (incorrectly named in the Identity name) as follows:
Without actually looking into the execution plan, it seems like you need a non-clustered index on Title, GeoCity, GeoState, and WebsiteID with the following include columns: ItemListID, GeoDisplay, Link, Description, CleanDescription, OptimizedDescription, PubDateParsed, ImageBytes, DateAdded
This will allow the execution plan to use the one non-clustered index that contains all of the information you are looking for in this query. Without it, it will use one of the indexes you showed and still have to go to the table to get the data you need.
This won’t totally fix your problem though, depending on how much data is in your table, doing the Contains on Title to do searching will always be expensive. It would be best if you could leverage full text searching to do the searching portion.
Hopefully this helps!