How can I mix Bitcoins with minimal fees? So that the output is pure AML. Is it possible to split the transaction into many small ones?
Assuming you found some technology that uses a large-enough UTXO set, which is essential for anonymity, it's most likely going to split the mix into cycles. Where in each cycle there are a few transactions that go through a bunch of addresses. So in between each cycle, you can change the amount to a smaller value.
Very basic example:
A - B - C - D - E - F
A transactions:
1 2 6
7
3 8
9
4 (decoy)
B transactions:
6 10 16
17
11 18 (decoy)
19
7 (decoy)
8 12 20
21
13 (decoy)
9 14 22 <-- your first amount is here
23
15 24 (decoy)
25
C/D/E transactions are similar to B except you can dynamically change the target amount in each step.
Each number is a transaction output, and it is assumed that when using this to make new transactions that additional, fresh inputs are also included in each tx that go to other places - utilizing CoinJoin.
F would be a (finalizer) where there is one more cluster of transactions before it finally hits your destination address. Which of the service is using bc1q addresses should also be a bc1q address, same applies for 1 3 and bc1p addresses.
In each transaction it can pay the lowest most reasonable fee to minimize cost offsets to the buyer, however this causes the mix to take a couple of hours at minimum.
Ideally we would make mixing as efficient as a hash function, where outputs are computationally impossible to trace.