Binary Equation
Your shift operator "<<" will eventually compiled to shift machine instruction. In case for pic its lsf or left shift file.
In question of efficiency, it should be adderessed to your compiler how it converts your C codes to machine codes.
Function wise, i think there is no simplier means to shift a bit other than the shift operators.
to make your C code effecient, do not make your function to take input paramaters to shift such as
SHIFT(0x01); and your function code is
unsigned short SHIFT(char TEMP){}
because, the 0x01 input parameter will be pushed to a software stack when it enters the function and will be popped once it exits teh function, Thats probably degrades the performance of your code.
Instead declare the variable as global. such as
void SHIFT() {
TEMP1=TEMP1<<2;
}
In general, functions that to be accessed very frequent, its input parameters as well as local variables must be global to improve efficiency. otherwise it will just be pushed and popped off the stack after it exits the function you called.