SELECT 
  cscart_products_categories.product_id, 
  GROUP_CONCAT(
    IF(
      cscart_products_categories.link_type = "M", 
      CONCAT(
        cscart_products_categories.category_id, 
        "M"
      ), 
      cscart_products_categories.category_id
    )
  ) AS category_ids 
FROM 
  cscart_products_categories 
  INNER JOIN cscart_categories ON cscart_categories.category_id = cscart_products_categories.category_id 
  AND cscart_categories.storefront_id IN (0, 1) 
  AND (
    cscart_categories.usergroup_ids = '' 
    OR FIND_IN_SET(
      0, cscart_categories.usergroup_ids
    ) 
    OR FIND_IN_SET(
      1, cscart_categories.usergroup_ids
    )
  ) 
  AND cscart_categories.status IN ('A', 'H') 
WHERE 
  cscart_products_categories.product_id IN (
    707, 705, 701, 697, 696, 695, 693, 682, 
    676, 673, 671, 670, 664, 663, 658, 657, 
    656, 651, 650, 647
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00106

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "11.93"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "2.07"
      },
      "nested_loop": [
        {
          "table": {
            "table_name": "cscart_categories",
            "access_type": "ALL",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "rows_examined_per_scan": 20,
            "rows_produced_per_join": 1,
            "filtered": "5.00",
            "cost_info": {
              "read_cost": "2.52",
              "eval_cost": "0.10",
              "prefix_cost": "2.62",
              "data_read_per_join": "2K"
            },
            "used_columns": [
              "category_id",
              "usergroup_ids",
              "status",
              "storefront_id"
            ],
            "attached_condition": "((`betaatif_store`.`cscart_categories`.`storefront_id` in (0,1)) and ((`betaatif_store`.`cscart_categories`.`usergroup_ids` = '') or (0 <> find_in_set(0,`betaatif_store`.`cscart_categories`.`usergroup_ids`)) or (0 <> find_in_set(1,`betaatif_store`.`cscart_categories`.`usergroup_ids`))) and (`betaatif_store`.`cscart_categories`.`status` in ('A','H')))"
          }
        },
        {
          "table": {
            "table_name": "cscart_products_categories",
            "access_type": "ref",
            "possible_keys": [
              "PRIMARY",
              "pt"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id"
            ],
            "key_length": "3",
            "ref": [
              "betaatif_store.cscart_categories.category_id"
            ],
            "rows_examined_per_scan": 43,
            "rows_produced_per_join": 2,
            "filtered": "4.80",
            "index_condition": "(`betaatif_store`.`cscart_products_categories`.`product_id` in (707,705,701,697,696,695,693,682,676,673,671,670,664,663,658,657,656,651,650,647))",
            "cost_info": {
              "read_cost": "2.94",
              "eval_cost": "0.21",
              "prefix_cost": "9.86",
              "data_read_per_join": "33"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
647 2,17M
650 2M,17
651 16M
656 3,15M
657 3,15M
658 3,15M
663 3,15M
664 3,15M
670 15M
671 15M
673 17,2M
676 5M
682 5M
693 5M
695 5M
696 5M
697 5M
701 15M
705 5M
707 17M