This is easiest if using the hd-media install method which must be downloaded from an obscure location on the debian FTP servers. This gives you install media that is a FAT16 filesystem, which is easier to modify than an ISO.
Syslinux runs from this FAT16 filesystem and unpacks initrd.gz from it, which gets you as far as running the Debian installer. The first few steps in the install process then scan hard drive devices, looking for one that contains an appropriate .iso, and once located, the installation proceeds normally.
Kernel modules can be built against the kernel headers in the main Squeeze repository.
One way to include custom drivers is to modify the initrd.gz, which becomes the root filesystem for the installer. This is a bit of a pain, though.
An easier way is to drop the custom kernel module into the FAT16 filesystem, and then use preseed to have the installer run a script early in the install process which copies the kernel module from the FAT16 filesystem (which will be mounted at /hd-media) to the root filesystem (a ramdisk created from initrd.gz). For example, I used this in preseed.cfg:
d-i preseed/early_command string /hd-media/early_command
And created the script early_command
on the install media:
#!/bin/sh
kernelmoddir="/lib/modules/2.6.32-5-amd64/updates"
mkdir "$kernelmoddir"
cp /hd-media/tg3.ko "${kernelmoddir}/tg3.ko"