Hi
You can get some more real-word advice on the clocking at http://www.utasker.com/kinetis/MCG.html
For the KL03 you can clock directly from the IRC48M for 48MHz or from the LIRC for 2MHz or 8MHz.
If you were to use the uTasker project these are the settings to choose all options (with 48MHz valid):
#define RUN_FROM_HIRC
#if defined RUN_FROM_HIRC
#define SYSTEM_CLOCK_DIVIDE 1
#define BUS_CLOCK_DIVIDE 2
#elif defined RUN_FROM_LIRC
#define RUN_FROM_LIRC_2M
#define SLOW_CLOCK_DIVIDE 1
#define SYSTEM_CLOCK_DIVIDE 1
#define BUS_CLOCK_DIVIDE 2
#else
#define SYSTEM_CLOCK_DIVIDE 1
#define BUS_CLOCK_DIVIDE 1
#endif
The actual code that configures the 48Mhz case is:
MCG_C1 = MCG_C1_CLKS_HIRC;
while ((MCG_S & MCG_S_CLKST_MASK) != MCG_S_CLKST_HICR) {
}
SIM_CLKDIV1 = (((SYSTEM_CLOCK_DIVIDE - 1) << 28) | ((BUS_CLOCK_DIVIDE - 1) << 16));
Below is the uTasker KL03 simulator confirming the clock speeds obtained:

Regards
Mark
Kinetis for professionals: http://www.utasker.com/kinetis.html