diff --git a/reviewboard/accounts/models.py b/reviewboard/accounts/models.py
index e73a10290cc6ac364c124b9c159d8ebb69772f48..c4a9f5d2faee34dda670e3f56ba7cc4cfa123002 100644
--- a/reviewboard/accounts/models.py
+++ b/reviewboard/accounts/models.py
@@ -468,6 +468,24 @@ def _is_user_profile_visible(self, user=None):
             user.is_admin_for_user(self))
 
 
+def _has_private_profile(self):
+    """Return whether the user's profile is marked as private.
+
+    Version Added:
+        5.0
+
+    Returns:
+        bool:
+        Whether the user's profile is marked as private.
+    """
+    try:
+        profile = self.get_profile(create_if_missing=False)
+    except Profile.DoesNotExist:
+        profile = None
+
+    return bool(profile and profile.is_private)
+
+
 def _should_send_email(self):
     """Get whether a user wants to receive emails.
 
@@ -677,6 +695,7 @@ def _is_admin_for_user(self, user):
 
 
 User.is_profile_visible = _is_user_profile_visible
+User.has_private_profile = _has_private_profile
 User.get_profile = _get_profile
 User.get_site_profile = _get_site_profile
 User.should_send_email = _should_send_email
diff --git a/reviewboard/accounts/search_indexes.py b/reviewboard/accounts/search_indexes.py
index c962aed66b8790e1d769e67e83d6c70d149a3964..576134ceceac5a89efe67bcbde2f229cc3aba172 100644
--- a/reviewboard/accounts/search_indexes.py
+++ b/reviewboard/accounts/search_indexes.py
@@ -79,9 +79,7 @@ class UserIndex(BaseSearchIndex, indexes.Indexable):
             unicode:
             The e-mail address.
         """
-        profile = user.get_profile(cached_only=True)
-
-        if profile is None or profile.is_private:
+        if user.has_private_profile():
             return ''
         else:
             return user.email
@@ -101,9 +99,7 @@ class UserIndex(BaseSearchIndex, indexes.Indexable):
             The full name of the user or an empty string if their profile is
             private.
         """
-        profile = user.get_profile(cached_only=True)
-
-        if profile is None or profile.is_private:
+        if user.has_private_profile():
             return ''
         else:
             return user.get_full_name()
@@ -119,5 +115,4 @@ class UserIndex(BaseSearchIndex, indexes.Indexable):
             bool:
             Whther or not the profile is private.
         """
-        profile = user.get_profile(cached_only=True)
-        return profile is None or profile.is_private
+        return user.has_private_profile()
diff --git a/reviewboard/templates/search/indexes/auth/user_text.txt b/reviewboard/templates/search/indexes/auth/user_text.txt
index 836dbeba5d324a7007d26d61e95fbe09dd74a042..59dc466a62d29dc2d9ec7af8a3bee67662574260 100644
--- a/reviewboard/templates/search/indexes/auth/user_text.txt
+++ b/reviewboard/templates/search/indexes/auth/user_text.txt
@@ -1,6 +1,6 @@
 {# Haystack data template for UserIndex #}
 {{object.username}}
-{% if not object.get_profile.is_private %}
+{% if not object.has_private_profile %}
 {{object.email}}
 {{object.get_full_name}}
 {% endif %}
diff --git a/reviewboard/templates/search/indexes/reviews/reviewrequest_text.txt b/reviewboard/templates/search/indexes/reviews/reviewrequest_text.txt
index 04b24a37b20debcb4f2af0b56876a0204e4ed0c2..64be6b1542fbba13ff5be8089c399200256b10df 100644
--- a/reviewboard/templates/search/indexes/reviews/reviewrequest_text.txt
+++ b/reviewboard/templates/search/indexes/reviews/reviewrequest_text.txt
@@ -5,6 +5,6 @@
 {{object.testing_done}}
 {{object.bugs_closed}}
 {{object.submitter.username}}
-{% if not object.submitter.get_profile.is_private %}{{object.submitter.get_full_name}}{% endif %}
+{% if not object.submitter.has_private_profile %}{{object.submitter.get_full_name}}{% endif %}
 {{object.get_all_diff_filenames}}
 {{object.commit_id}}
