How to improve this query so it'll run quicker
You can try this:

SELECT m.vlanID, 
        v.vlan_name, 
        m.interfaceName, 
        count(1) as mac,
         n.nd_name, 
         p.interfaceDescription, 
         p.interfacePortType
    FROM  macs m 
    INNER JOIN network_devices n 
        ON n.nd_ip_address = m.ipAddr
    INNER JOIN vlans v  
        ON m.vlanID = v.vlan_id
    INNER JOIN ports p
        ON p.vlanID = m.vlanID
    GROUP BY m.vlanID, v.vlan_name, m.interfaceName, n.nd_name, p.interfaceDescription, p.interfacePortType


A few things about the changes: 


The cartesian join to inner join switch is purely cosmetic, unless the mysql implementation you're using doesn't support the cartesian inner join syntax, which would be very odd.
Removing the Order By clause should provide a performance bump, but depending on the way you're using the results may not be useful.
If m.macAddress is sometimes null, count(1) != count(m.macAddress)


These small optimizations stated, there is not a whole lot to optimize about this query itself. There is something about the context of the query that is causing the exceptional runtime.

Indexes on n.nd_ip_address, m.ipAddr,m.vlanID, v.vlan_id, and p.vlanID
would certainly help substantially. If you have to run the query multiple times, it would be well worth the time invested in creating the indexes even on temporary data. 

It's even likely that re-creating the indexes every time the query runs would cause the overall runtime to be much lower.