Como dice Suky, los ciclos for toman más instrucciones que una sola.
Depende qué hagas en cada ciclo... qué inicializas, qué comparas y qué modificas.
Un ejemplo en ensamblador generado por CCS...
.................... for(i=0; i<100; ++i)
0018: CLRF 06
001A: MOVF 06,W
001C: SUBLW 63
001E: BNC 0026
.................... ++j;
0020: INCF 07,F
0022: INCF 06,F
0024: BRA 001A
Y tu ejemplo que es muchísimo mas complejo comparar números de 32 bits:
int32 i;
.................... for(i=0;i!=500000;i++)
0018: CLRF 09
001A: CLRF 08
001C: CLRF 07
001E: CLRF 06
0020: MOVF 06,W
0022: SUBLW 20
0024: BNZ 0036
0026: MOVF 07,W
0028: SUBLW A1
002A: BNZ 0036
002C: MOVF 08,W
002E: SUBLW 07
0030: BNZ 0036
0032: MOVF 09,F
0034: BZ 004A
.................... ++j;
0036: INCF 0A,F
0038: MOVLW 01
003A: ADDWF 06,F
003C: BTFSC FD8.0
003E: INCF 07,F
0040: BTFSC FD8.2
0042: INCF 08,F
0044: BTFSC FD8.2
0046: INCF 09,F
0048: BRA 0020
.................... }