SELECT 
  a.category_id 
FROM 
  q_categories as a 
  LEFT JOIN q_categories as b ON b.category_id IN (249) 
WHERE 
  a.id_path LIKE CONCAT(b.id_path, '/%')

Query time 0.00059

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "134.53"
    },
    "nested_loop": [
      {
        "table": {
          "table_name": "b",
          "access_type": "const",
          "possible_keys": [
            "PRIMARY",
            "p_category_id"
          ],
          "key": "PRIMARY",
          "used_key_parts": [
            "category_id"
          ],
          "key_length": "3",
          "ref": [
            "const"
          ],
          "rows_examined_per_scan": 1,
          "rows_produced_per_join": 1,
          "filtered": "100.00",
          "cost_info": {
            "read_cost": "0.00",
            "eval_cost": "0.20",
            "prefix_cost": "0.00",
            "data_read_per_join": "2K"
          },
          "used_columns": [
            "category_id",
            "id_path"
          ]
        }
      },
      {
        "table": {
          "table_name": "a",
          "access_type": "ALL",
          "rows_examined_per_scan": 598,
          "rows_produced_per_join": 66,
          "filtered": "11.11",
          "cost_info": {
            "read_cost": "14.93",
            "eval_cost": "13.29",
            "prefix_cost": "134.53",
            "data_read_per_join": "175K"
          },
          "used_columns": [
            "category_id",
            "id_path"
          ],
          "attached_condition": "(`portal`.`a`.`id_path` like <cache>(concat('248/249','/%')))"
        }
      }
    ]
  }
}

Result

category_id
250
435
436
490
496
500
506
251
492
497
501
507
252
498
502
508
253
499
503
509
254
489
504
255
505
532
256
271
433
434
459
484
533
535
579
595