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, 
  product_position_source.position AS position 
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') 
  LEFT JOIN cscart_products_categories AS product_position_source ON cscart_products_categories.product_id = product_position_source.product_id 
  AND product_position_source.category_id = 101 
WHERE 
  cscart_products_categories.product_id IN (
    44768, 46190, 46165, 37334, 48065, 37337, 
    27929, 40369, 36504, 46263, 47608, 
    35647, 45362, 44489, 38795, 35645, 
    38123, 32315, 1415, 48695, 37417, 37423, 
    44929, 48676, 46616, 28439, 44490, 
    48715, 32314, 41006, 46187, 27933
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00262

JSON explain

{
  "query_block": {
    "select_id": 1,
    "nested_loop": [
      {
        "table": {
          "table_name": "cscart_products_categories",
          "access_type": "range",
          "possible_keys": ["PRIMARY", "pt"],
          "key": "pt",
          "key_length": "3",
          "used_key_parts": ["product_id"],
          "rows": 66,
          "filtered": 100,
          "index_condition": "cscart_products_categories.product_id in (44768,46190,46165,37334,48065,37337,27929,40369,36504,46263,47608,35647,45362,44489,38795,35645,38123,32315,1415,48695,37417,37423,44929,48676,46616,28439,44490,48715,32314,41006,46187,27933)"
        }
      },
      {
        "table": {
          "table_name": "cscart_categories",
          "access_type": "eq_ref",
          "possible_keys": ["PRIMARY", "c_status", "p_category_id"],
          "key": "PRIMARY",
          "key_length": "3",
          "used_key_parts": ["category_id"],
          "ref": ["dev_db.cscart_products_categories.category_id"],
          "rows": 1,
          "filtered": 100,
          "attached_condition": "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')"
        }
      },
      {
        "table": {
          "table_name": "product_position_source",
          "access_type": "eq_ref",
          "possible_keys": ["PRIMARY", "pt"],
          "key": "PRIMARY",
          "key_length": "6",
          "used_key_parts": ["category_id", "product_id"],
          "ref": ["const", "dev_db.cscart_products_categories.product_id"],
          "rows": 1,
          "filtered": 100
        }
      }
    ]
  }
}

Result

product_id category_ids position
1415 340,313M
27929 340M
27933 340M
28439 169M
32314 313,165M
32315 313,165M
35645 165M
35647 166M
36504 166M
37334 166M
37337 166M
37417 166M
37423 166M
38123 340M
38795 166M
40369 165M
41006 166,194M
44489 169M
44490 169M
44768 169M
44929 341,340,174M
45362 166,340M
46165 171M
46187 101,195,166,105M 0
46190 105,195,101,166M 0
46263 101,195,166M 0
46616 105,213,212,166M
47608 210,212,166M
48065 166,213,169M
48676 210,315,213,169M
48695 213,315,210,412,169M
48715 315,213,210,412,169M