Generation of sine waves within the audible range using a DAC
If you want to get 20kHz signals, you need to do at least 3 things.

The first is get 50ks/s or more transferred to your DAC. That means running the SPI clock at around 1MHz or more. Reading between the lines, the DAC should be able to accept at least 10MHz SPI clock. The challenge is to find the MCU library that can transmit SPI at 1MHz.

The second is to generate sine samples at the right rate. Having saved 64 samples of a sine wave in your table, you do not need to step through them one at a time, you can do 2 steps at a time, or more. In fact if you were generating a 20kHz signal at 50kHz sampling rate, you would be stepping 0.4 of a circle = 144 degrees = about 25 steps of a 64 entry table.

For a table-less way of doing it, look up CORDIC. You should find a 20MHz atmega328 is fast enough to do that.

The third thing is to design and build an anti-alias filter to go after your DAC, which must pass the fmax of 20kHz, and block all frequencies from (sampling_rate - fmax) upwards. With a 50kHz sample rate, that's pass 20kHz, block 30kHz and up. You can ease the steepness requirement of the filter by increasing the sample rate. At 100kHz, you would only need to block frequencies above 80kHz, a much easier filter to build.

Some audio DACs oversample within the DAC with digital filters to make things much much easier. The DAC you have quoted doesn't do this.