Я бы лично использовал String.GetHashCode () . Это основная хеш-функция. Я, честно говоря, понятия не имею, как это работает по сравнению с другими реализациями, но это должно быть хорошо.
Любая из двух названных вами функций хеширования должна быть достаточно быстрой, чтобы вы не заметили большой разницы между ними. Если бы этот сайт не требовал сверхвысокой производительности, я бы не стал сильно о них беспокоиться. Я лично, наверное, пошел бы на MD5. Это может быть отформатировано как строка как шестнадцатеричный в 64 символа или как строка из 64 основных в 44 символов.
Причина, по которой я бы выбрал MD5, заключается в том, что вы вряд ли столкнетесь с коллизиями, и даже если вы это сделаете, вы можете структурировать свои запросы с помощью "где urlhash = @hash and url = @url". Механизм базы данных должен определить, что один проиндексирован, а другой нет, и использовать эту информацию для разумного поиска.
Если есть коллизии, индексированное сканирование по urlhash вернет несколько результатов, с помощью которых будет легко выполнить сравнение текста, чтобы получить правильный. Хотя вряд ли это будет актуально очень часто. У вас довольно низкие шансы получить столкновения таким образом.