diff --git a/.rubocop.yml b/.rubocop.yml
index af1c7ad50f47e182a0a8aef691eccee3b7e12f8f..8edba38cc655451a6421acd95c4bde4d74d29b21 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -1025,3 +1025,10 @@ RSpec/FactoryBot/LocalStaticAssignment:
 
 Rails/TransactionExitStatement:
   Enabled: true
+
+Search/AvoidCheckingFinishedOnDeprecatedMigrations:
+  Include:
+    - 'ee/app/models/**/*.rb'
+    - 'ee/lib/elastic/**/*.rb'
+    - 'ee/lib/gitlab/elastic/**/*.rb'
+    - 'ee/spec/support/helpers/elasticsearch_helpers.rb'
diff --git a/.rubocop_todo/search/avoid_checking_finished_on_deprecated_migrations.yml b/.rubocop_todo/search/avoid_checking_finished_on_deprecated_migrations.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d4b532ff76ceef221d3f4fdbd37d730cc89cf31d
--- /dev/null
+++ b/.rubocop_todo/search/avoid_checking_finished_on_deprecated_migrations.yml
@@ -0,0 +1,3 @@
+---
+Search/AvoidCheckingFinishedOnDeprecatedMigrations:
+  Details: grace period
diff --git a/rubocop/cop/search/avoid_checking_finished_on_deprecated_migrations.rb b/rubocop/cop/search/avoid_checking_finished_on_deprecated_migrations.rb
new file mode 100644
index 0000000000000000000000000000000000000000..0a6813d4bbaa3555ef01dc39f8fd404a1e323945
--- /dev/null
+++ b/rubocop/cop/search/avoid_checking_finished_on_deprecated_migrations.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+module RuboCop
+  module Cop
+    module Search
+      # Cop that prevents checking migration_has_finished? on deprecated migrations
+      #
+      # @example
+      #
+      #   # bad
+      #   def disable_project_joins_for_blob?
+      #     Elastic::DataMigrationService
+      #       .migration_has_finished?(:backfill_project_permissions_in_blobs_using_permutations)
+      #   end
+      #
+      #   # good
+      #   def disable_project_joins_for_blob?
+      #     Elastic::DataMigrationService.migration_has_finished?(:backfill_project_permissions_in_blobs)
+      #   end
+
+      class AvoidCheckingFinishedOnDeprecatedMigrations < RuboCop::Cop::Base
+        MSG = 'Migration is deprecated and can not be used with `migration_has_finished?`.'
+
+        def_node_matcher :deprecated_migration?, <<~PATTERN
+          (send
+            (const (const {nil? cbase} :Elastic) :DataMigrationService) :migration_has_finished?
+              (sym :backfill_project_permissions_in_blobs_using_permutations))
+        PATTERN
+
+        RESTRICT_ON_SEND = %i[migration_has_finished?].freeze
+
+        def on_send(node)
+          add_offense(node) if deprecated_migration?(node)
+        end
+      end
+    end
+  end
+end
diff --git a/spec/rubocop/cop/search/avoid_checking_finished_on_deprecated_migrations_spec.rb b/spec/rubocop/cop/search/avoid_checking_finished_on_deprecated_migrations_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..9853423e758167ef36db9b74774c578f651c829c
--- /dev/null
+++ b/spec/rubocop/cop/search/avoid_checking_finished_on_deprecated_migrations_spec.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require 'rubocop_spec_helper'
+require_relative '../../../../rubocop/cop/search/avoid_checking_finished_on_deprecated_migrations'
+
+RSpec.describe RuboCop::Cop::Search::AvoidCheckingFinishedOnDeprecatedMigrations, feature_category: :global_search do
+  context 'when a deprecated class is used with migration_has_finished?' do
+    it 'flags it as an offense' do
+      expect_offense <<~SOURCE
+        return if Elastic::DataMigrationService.migration_has_finished?(:backfill_project_permissions_in_blobs_using_permutations)
+                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Migration is deprecated and can not be used with `migration_has_finished?`.
+      SOURCE
+    end
+  end
+
+  context 'when a non deprecated class is used with migration_has_finished?' do
+    it 'does not flag it as an offense' do
+      expect_no_offenses <<~SOURCE
+        return if Elastic::DataMigrationService.migration_has_finished?(:backfill_project_permissions_in_blobs)
+      SOURCE
+    end
+  end
+
+  context 'when migration_has_finished? method is called on another class' do
+    it 'does not flag it as an offense' do
+      expect_no_offenses <<~SOURCE
+        return if Klass.migration_has_finished?(:backfill_project_permissions_in_blobs_using_permutations)
+      SOURCE
+    end
+  end
+end