diff --git src/bp-xprofile/bp-xprofile-cache.php src/bp-xprofile/bp-xprofile-cache.php
index 12f9acf..ab5153b 100644
--- src/bp-xprofile/bp-xprofile-cache.php
+++ src/bp-xprofile/bp-xprofile-cache.php
@@ -306,5 +306,15 @@ function bp_xprofile_clear_field_cache( $field ) {
 }
 add_action( 'xprofile_field_after_save', 'bp_xprofile_clear_field_cache' );
 
+/**
+ * Clear the field-name cache.
+ *
+ * @since 2.8.0
+ */
+function bp_xprofile_reset_fields_by_name_cache_incrementor() {
+	bp_core_reset_incrementor( 'bp_xprofile_fields_by_name' );
+}
+add_action( 'xprofile_field_before_save', 'bp_xprofile_reset_fields_by_name_cache_incrementor' );
+
 // List actions to clear super cached pages on, if super cache is installed.
 add_action( 'xprofile_updated_profile', 'bp_core_clear_cache' );
diff --git src/bp-xprofile/bp-xprofile-functions.php src/bp-xprofile/bp-xprofile-functions.php
index fb1bf33..c5c1427 100644
--- src/bp-xprofile/bp-xprofile-functions.php
+++ src/bp-xprofile/bp-xprofile-functions.php
@@ -594,7 +594,12 @@ function xprofile_check_is_required_field( $field_id ) {
  * @return int $field_id on success, false on failure.
  */
 function xprofile_get_field_id_from_name( $field_name ) {
-	return BP_XProfile_Field::get_id_from_name( $field_name );
+	$cached = bp_core_get_incremented_cache( $field_name, 'bp_xprofile_fields_by_name' );
+	if ( false === $cached ) {
+		$cached = BP_XProfile_Field::get_id_from_name( $field_name );
+		bp_core_set_incremented_cache( $field_name, 'bp_xprofile_fields_by_name', $cached );
+	}
+	return $cached;
 }
 
 /**
diff --git tests/phpunit/testcases/xprofile/cache.php tests/phpunit/testcases/xprofile/cache.php
index bc38937..ba6bea2 100644
--- tests/phpunit/testcases/xprofile/cache.php
+++ tests/phpunit/testcases/xprofile/cache.php
@@ -164,4 +164,74 @@ class BP_Tests_XProfile_Cache extends BP_UnitTestCase {
 		$field_2 = xprofile_get_field( $f );
 		$this->assertSame( 'Bar', $field_2->name );
 	}
+
+	/**
+	 * @ticket BP7407
+	 */
+	public function test_get_field_id_from_name_should_be_cached() {
+		global $wpdb;
+
+		$g = $this->factory->xprofile_group->create();
+		$f = $this->factory->xprofile_field->create( array(
+			'field_group_id' => $g,
+			'name' => 'Foo',
+		) );
+
+		// Prime cache.
+		xprofile_get_field_id_from_name( 'Foo' );
+
+		$num_queries = $wpdb->num_queries;
+
+		$this->assertSame( $f, xprofile_get_field_id_from_name( 'Foo' ) );
+		$this->assertSame( $num_queries, $wpdb->num_queries );
+	}
+
+	/**
+	 * @ticket BP7407
+	 */
+	public function test_get_field_id_from_name_cache_should_be_invalidated_on_field_update() {
+		$g = $this->factory->xprofile_group->create();
+		$f1 = $this->factory->xprofile_field->create( array(
+			'field_group_id' => $g,
+			'name' => 'Foo',
+		) );
+		$f2 = $this->factory->xprofile_field->create( array(
+			'field_group_id' => $g,
+			'name' => 'Bar',
+		) );
+
+		// Prime cache.
+		xprofile_get_field_id_from_name( 'Foo' );
+		xprofile_get_field_id_from_name( 'Bar' );
+
+		// Free up the name 'Bar'.
+		$field2 = xprofile_get_field( $f2 );
+		$field2->name = 'Quz';
+		$field2->save();
+
+		// Take the name 'Bar'.
+		$field1 = xprofile_get_field( $f1 );
+		$field1->name = 'Bar';
+		$field1->save();
+
+		$this->assertSame( $f1, xprofile_get_field_id_from_name( 'Bar' ) );
+	}
+
+	/**
+	 * @ticket BP7407
+	 */
+	public function test_get_field_id_from_name_cache_should_be_invalidated_on_field_deletion() {
+		$g = $this->factory->xprofile_group->create();
+		$f = $this->factory->xprofile_field->create( array(
+			'field_group_id' => $g,
+			'name' => 'Foo',
+		) );
+
+		// Prime cache.
+		xprofile_get_field_id_from_name( 'Foo' );
+
+		xprofile_delete_field( $f );
+
+		$this->assertNull( xprofile_get_field_id_from_name( 'Bar' ) );
+	}
 }
