SELECT 
  pfv.feature_id, 
  pfv.product_id, 
  pfv.variant_id, 
  gp.group_id 
FROM 
  cscart_product_features_values AS pfv 
  INNER JOIN cscart_product_variation_group_products AS gp ON pfv.product_id = gp.product_id 
  INNER JOIN cscart_product_variation_group_features AS gpf ON gpf.group_id = gp.group_id 
  AND gpf.feature_id = pfv.feature_id 
WHERE 
  pfv.lang_code = 'ru' 
  AND gp.group_id IN (23, 24, 25, 21, 27, 20, 22)

Query time 0.00091

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "13.07"
    },
    "nested_loop": [
      {
        "table": {
          "table_name": "gpf",
          "access_type": "index",
          "possible_keys": [
            "PRIMARY",
            "idx_group_id"
          ],
          "key": "PRIMARY",
          "used_key_parts": [
            "feature_id",
            "group_id"
          ],
          "key_length": "8",
          "rows_examined_per_scan": 27,
          "rows_produced_per_join": 6,
          "filtered": "25.93",
          "using_index": true,
          "cost_info": {
            "read_cost": "2.57",
            "eval_cost": "0.70",
            "prefix_cost": "3.27",
            "data_read_per_join": "783"
          },
          "used_columns": [
            "feature_id",
            "group_id"
          ],
          "attached_condition": "(`testdobroded`.`gpf`.`group_id` in (23,24,25,21,27,20,22))"
        }
      },
      {
        "table": {
          "table_name": "gp",
          "access_type": "ref",
          "possible_keys": [
            "PRIMARY",
            "idx_group_id"
          ],
          "key": "idx_group_id",
          "used_key_parts": [
            "group_id"
          ],
          "key_length": "4",
          "ref": [
            "testdobroded.gpf.group_id"
          ],
          "rows_examined_per_scan": 2,
          "rows_produced_per_join": 13,
          "filtered": "100.00",
          "cost_info": {
            "read_cost": "3.50",
            "eval_cost": "1.40",
            "prefix_cost": "8.17",
            "data_read_per_join": "223"
          },
          "used_columns": [
            "product_id",
            "group_id"
          ]
        }
      },
      {
        "table": {
          "table_name": "pfv",
          "access_type": "ref",
          "possible_keys": [
            "PRIMARY",
            "fl",
            "lang_code",
            "product_id",
            "fpl",
            "idx_product_feature_variant_id"
          ],
          "key": "PRIMARY",
          "used_key_parts": [
            "feature_id",
            "product_id"
          ],
          "key_length": "6",
          "ref": [
            "testdobroded.gpf.feature_id",
            "testdobroded.gp.product_id"
          ],
          "rows_examined_per_scan": 1,
          "rows_produced_per_join": 13,
          "filtered": "99.98",
          "using_index": true,
          "cost_info": {
            "read_cost": "3.50",
            "eval_cost": "1.40",
            "prefix_cost": "13.07",
            "data_read_per_join": "10K"
          },
          "used_columns": [
            "feature_id",
            "product_id",
            "variant_id",
            "lang_code"
          ],
          "attached_condition": "((`testdobroded`.`pfv`.`lang_code` = 'ru') and (`testdobroded`.`gpf`.`feature_id` = `testdobroded`.`pfv`.`feature_id`) and (`testdobroded`.`pfv`.`product_id` = `testdobroded`.`gp`.`product_id`))"
        }
      }
    ]
  }
}

Result

feature_id product_id variant_id group_id
86 69 8873 20
86 1535 8875 20
86 36 8873 21
86 1536 8875 21
86 45 8873 22
86 1537 8875 22
86 55 8873 23
86 1538 8875 23
86 56 8873 24
86 1539 8875 24
86 58 8873 25
86 1540 8875 25
86 65 8873 27
86 1542 8875 27