Install a 2-pole GFCI breaker in the panel
This is what's called a multi-wire branch circuit or MWBC. It is 2 sub-circuits fed off separate breakers. These 2 breakers are handle-tied because that is a safety requirement for MWBCs. That is also why neutral is pigtailed.
The split receptacle is a very typical use of an MWBC to deliver 2 sub-circuits to one recep. The switching is a neat trick.
The only way you can make this setup GFCI is to install a 2-pole GFCI breaker in the panel. Individual GFCI devices will not work because there isn't space for them.
Note that your current breakers are half-width (we call 'em "double-stuff") and that means you will need to find some more space in your panel. There's no such thing as a half-width GFCI breaker.
However, if you are able to run new cable between the switch and receptacle, and are able to blow out the under-sink receptacle into a 2-gang, then you could fit a GFCI+switch device in the current switch location, and a plain recep and GFCI downstairs. use either 2 cables or /2/2 cable; mark one of the cables' wires purple and gray (gray=neutral), and the other hot wire red.
- In the under-sink box, red+white land on a GFCI receptacle that powers the dishwasher. Purple+gray land on a plain receptacle that powers the disposal.
- In the switch box, Red + white wire as before. Black+white go to the LINE side of the GFCI+switch.
- Purple to one of the switch pigtails. The other switch pigtail to LOAD hot. Gray to the LOAD neutral of the GFCI+switch.
The key to it is the separate neutrals past the first GFCI. That's why you can't do it with cables as-installed except by using a 2-pole GFCI breaker.