The short answer is: in 95% of the cases it cannot be done, and yours falls within that 95%.
First, let me say that it makes little sense to speak of routing separately upload and download, because even intense download tasks require that some packets flow backward to the source, i.e. any download requires some upload flow (This is less true for UDP than for TCP, but never mind that).
If we were to channel the upload of a mostly-download connection through a different NIC than the one used for the download part, the source of the download would see replies to its packets originate from a different IP address than the one to which it is sending packets; it is a basic security feature to disregard packets purporting to be related to a given connection, but originating from a third-party address. Hence the upload part of the conversation would be dropped, and the connection would grind to a halt. This has little to do with ISPs and their services: it occurs
even between two pcs on the same LAN, if one of the two is trying to connect to an IP address by using in the same connection two different NICS (hence two different IPs).
This is the reason why we talk about connections, not upload/download.But then one might re-formulate your question as follows: can I have a pc, which has two NICs both connected to the network, use the two NICs for two distinct connections, say the slow connection for a slow, tedious job like e-mail, and the fast connection for a quick process like Web page download?
The short answer to this well-posed question is: in Windows, *Nix (including MacOS) and Android no.In Linux yes, you can.
The reason why you cannot do this in Windows (any version), *Nix and Android is that any routing table can have just one default gateway (*i.e.*the address to which you send all packets not destined to your LAN), and these OSes can only handle one routing table: hence a single gateway.
Instead, in order to allott different applications to different interfaces, you need two distinct functionalities: one, the ability two run two routing tables simultaneously, and two, the ability to tie applications to either routing table. Only the Linux kernel (light years ahead of the competition) has these capabilities, as of this writing. The *Nix kernel partially compensates for that through a judicious use of its firewall, pfsense, without however achieving the full result.
The ability to run two routing tables at the same time (called policy routing or source-based routing) means that packets are differently routed depending on their IP address. This is an extremely useful feature if you are building a router.
However, in order to use different NICs (and thus IPS) depending on the application, you need network namespaces, a Linux kernel feature that allows you to build a separate shell with its own network stack. Now processes running inside this separate shell will all be routed according to the routing table of the network namespace, not that of the main pc.
This is of course a form of virtualization, albeit a weaker form than, say, a Linux container, not to mention a virtual machine. But it is the real way, with a single pc, to route different processes through different interfaces.
To sum up, in Linux (and only in Linux) you may run a separate network namespace, which is, for instance, connected through a VPN to your work place, so that you access your work resources, and, if you run Firefox, you appear to be based at your work place, while at the same time runnning Google Chrome outside the network namespace, and thus appearing (on Chrome) to be based at home.