You're severely limiting yourself if you limit your protocol options to FTP.
Ideally you only want to upload the "bits" that have changed since the last backup. The FTP protocol doesn't have functionality to do this natively, so you'd need some kind of software running in your office to identify the "changed bits" and send only those changes. You could certainly implement something like this, but I think you'll find that you're limited in the off-the-shelf solutions you can find.
You might consider looking at something that implements the rsync protocol, which allows for only the changed bits of files to be sent and builds this list of changed bits based on comparison of the local and remote copies of files.
Your remote Linux server could host an rsync server fairly easily. Most Linux distributions have a built-in package for an rsync server. Access to rsync should be performed over a secure transport mechanism like a VPN or an SSH tunnel.
On the Windows Server side you might have a look at one of the packages below.
Personally, I'd look at rdiff-backup because it allows you to easily maintain multiple generations of backups remotely (daily, weekly, monthly, etc).
All rsync implementations on Windows that I'm aware of handle NTFS permissions poorly. I use Helge Klein's wonderful setacl tool to dump the permissions of the files being backed up to a file within the backup set. In the event of a disaster setacl can be used to restore the permissions.