A fly cutter will not work. Too hard to explain.
Use a slot mill cutter that gives the correct width of cut or smaller and do a pass for inner and outer edge.
General idea is to cut a circle, like you would on a flat plate, but instead of x and y moving to create the circle you want X and A.
first set zero at the centre of the circle.
move X the 1/2 inch. G1 X-0.5
then for CW G3 I0 J0.
That would cut a circle on the flat.
What you need is for the Y part of the move to be replaced with an A move.
A is in degrees so you have to convert the Y value to degrees. for 4" that is 12.5664 circumference. divided by 1/2" (radius) gives 360/25.1328 which is +/-14.3239 degrees. So for original y going between +0.5 and -0.5, rotary head needs to go Y value multiplied by 28.6478.
You may have to create the circle from small steps of X and A, unless you can slave the Y (scaled ) to the A axis, and disable the Y moves.
I don't know how to do that in G code, but you can calculate your own circle values with sin() and Cos() functions in most controllers.
If you learn how to make your own circles on the flat without G2/G3 then you will only need to substitute the new A value, for what was calculated for Y (scaled)
The formula for a circle is X squared + Y squared = R squared if you can't use sin/cos.
As an algorithm where R is radius
FOR D = 0 to 359 with steps 0.1 to give good resolution better than 1 thou
X=SIN(D) * R
Y=COS(D) * 14.3239
I've never tried this, but I think it is close to the mark.
If the rotary part is not digitally controlled, this will be hard work.