The query seems to first use the timestamp column which results in a huge number of records and then filters out using the integer and the macaddr indices. If it was to use the integer index first it would start with a tiny number of records.
May be the record distribution of quantiles is skewed. Have you tried to set more granular statistics for your int column?
The effective_cache_size is one gig. The others are not set so therefore the default.
Ideally the effective_cache_size can be set to as much as 50-60% of your available memory. Also you need to tune your random_page_cost as per the behavior of your disk.