Depending on platform FPC produces these sizes when configured properly for size (-XX -Xs)

Win32:
Hello world: 17kb
LCL Form: ~1.5mb (IIRC, this is from memory, need latest fpc with internal linker)

Linux:
Hello world: 23kb
LCL Form: ~2.2mb

The problem of size is 2 fold:

1. GNU ld isn't exactly efficient (speed and result size), however in win32 this is already fixed in latest fpc
2. Debug info cannot be separated because GDB doesn't support it. If you want to help, write a debugger.

As for defaults, I think it's sane to set defaults to debug output. It's not normal to develop without debug info. Once you're happy with the result, just set it to release settings and you're done.

Besides up to 5mb binaries are pretty normal nowadays even with software which doesn't use smartlinking. If you want to know what others take, look at all the .dll files they bundle with the .exe and add that up to see real size. It's in the 10s of MB.