1) The question is, would this be efficient to jump around with goto statements? What if I have 1000 goto labels?
From your small example with 4 goto labels, where you jump back and forth, no it is not efficient in terms of performance. To avoid overhead in function call mechanism, this method is disabling many other optimization which the compiler will automatically do for you. I am not listing them, but this worth reading.
2) Do the goto statements translate directly into machine code which tells the computer just to JUMP to a different memory address?
YES (As others correctly pointed out)
3) Is this a lower cost in the machine to jump around like this when compared with the cost to call a function?
YES, only if your compiler is pre historic, and doesn't have any optimization mechanism in built. Otherwise NO.
And I am not talking about best practices..