2 of 3 added 112 characters in body

Associative array in bash (and in other languages) does not preserve the order of elements in declaration.

You can add another array to keep track the order of declaration:

YELLOW=$'\e[93m'                                                                
declare -A OP=( [Description]="remote to destination"                           
                [Source]="/var/www"                                             
                [Destination]="/foo/bar"                                        
                [Log]="my.log"                                                  
                [Email]="me@here" )                                             

declare -A IP=( [1]="Description"                                               
                [2]="Source"                                                    
                [3]="Destination"                                               
                [4]="Log"                                                       
                [5]="Email" );                                                  

NO_COLS=$(tput cols)                                                            
COLS_PER_COL=$((NO_COLS/3))                                                     
PRINT_FORMAT="%"$COLS_PER_COL"s%""s\n"                                          

for i in "${!IP[@]}"; do                                                        
  k=${IP[$i]}                                                                   
  printf "$PRINT_FORMAT" "$k :" " $YELLOW${OP[$k]}$ENDCOL"                      
done